#include <iostream>
#include <queue>
#include <map>
#include <fstream>
#include <algorithm>
#include <stack>
using namespace std;
int viz[100001];
map<int, vector<int>> LisAd;
int N, M, i, index, val, compConex;
void constrListAd()
{
ifstream f("dfs.in");
f >> N >> M;
for (i = 1; i <= M; i++)
{
f >> index >> val;
LisAd[index].push_back(val);
LisAd[val].push_back(index);
}
}
void DFS(int nod)
{
viz[nod] = 1;
for (int n : LisAd[nod])
if (!viz[n])
{
DFS(n);
}
}
int main() {
constrListAd();
for(i =1;i<=N;i++)
{
if(!viz[i])
{
DFS(i);
compConex++;
}
}
ofstream g("dfs.out");
g << compConex;
return 0;
}