#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("dfs.in");
ofstream fout ("dfs.out");
vector <int > v[100005];
queue <int > coada;
bool incoada[100005];
int n, m, comp;
void citire()
{fin >> n >> m;
int a, b;
for (int i=1;i<=m;i++)
{fin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
}
void dfs (int k)
{incoada[k]=true;
for (int i=0;i<v[k].size();i++)
if(incoada[v[k][i]]==false)dfs(v[k][i]);
}
int main()
{citire ();
for (int i=1;i<=n;i++)
{if(incoada[i]==false)
{dfs(i);
comp++;
}
}
fout << comp;
return 0;
}