#include <cstdio>
#include <vector>
#define IN "dfs.in","r",stdin
#define OUT "dfs.out","w",stdout
#define MAX 200010
using namespace std;
vector <int> gr[MAX];
int n,m;
bool v[MAX/2];
void dfs(int nod);
int main()
{
freopen(IN);
freopen(OUT);
int x,y,cnt=0;
scanf("%d%d",&n,&m);
for(register int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
gr[x].push_back(y);
gr[y].push_back(x);
}
for(register int i=1;i<=n;i++)
if(!v[i]){
cnt++;
dfs(i);
}
printf("%d",cnt);
return 0;
}
void dfs(int nod){
v[nod]=1;
for(register int i=0;i<gr[nod].size();i++)
if(!v[gr[nod][i]])
dfs(gr[nod][i]);
}