#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream f("dfs.in");
int n,x,y,j,u,p,z=0,k=0;
long m,i;
int a[1001][1001];
int l[1001];
int c[1001];
f>>n>>m;
for(i=1;i<=m;i++){//citeste muchiile
f>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
i=1;
while(k==0){
z++;//creste nr conexe
l[i]=z;//atribuie nod la conexa
c[1]=i;//pune nod in coada
p=1;
u=1;
while(p<=u){
for(j=1;j<=n;j++)//cauta noduri conectate cu c[p]
if(a[c[p]][j]==1&&l[j]==0){//daca nodul e conectat si nu are alta coectie
u++;//urcam in coada
c[u]=j;
l[j]=z;//conectam nodul
}
p++;
}
while(l[i]!=0)i++;
if(i==n+1)k++;
}
cout<<z;
}