#include <stdio.h>
int val[400001],next[400001],last[100001];
char ok[100001];
void dfs(int x){
int y,poz;
ok[x]=1;
poz=last[x];
while(poz!=0){
y=val[poz];
if(ok[y]==0){
dfs(y);
}
poz=next[poz];
}
}
int main(){
int n,m,k,i,x,y,s;
FILE *fin,*fout;
fin=fopen("dfs.in","r");
fout=fopen("dfs.out","w");
fscanf(fin,"%d%d",&n,&m);
k=0;
for(i=1;i<=m;i++){
fscanf(fin,"%d%d",&x,&y);
k++;
val[k]=y;
next[k]=last[x];
last[x]=k;
k++;
val[k]=x;
next[k]=last[y];
last[y]=k;
}
s=0;
for(i=1;i<=n;i++){
if(ok[i]==0){
dfs(i);
s++;
}
}
fprintf(fout,"%d\n",s);
fclose(fin);
fclose(fout);
return 0;
}