#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("dfs.in");
ofstream g("dfs.out");
bool v[100000];
vector<int> graf[100000];
void grconex(int nod)
{
int i;
v[nod] = true;
for(i=0;i<graf[nod].size();i++)
if(!v[graf[nod][i]])
{
v[graf[nod][i]] = true;
grconex(graf[nod][i]);
}
}
int main()
{
int n,m,i,q=0;
fstream f("dfs.in",ios::in);
f>>n>>m;
int a,b;
for( i=1;i<=m;i++)
{
f>>a>>b;
graf[a].push_back(b);
graf[b].push_back(a);
}
f.close();
for(i=1;i<=n;i++)
if(!v[i])
{
q++;
grconex(i);
}
g<<q;
g.close();
}