#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
#define maxn 50005
int f[maxn];
int find( int x)
{
if( x != f[x])
return f[x] = find(f[x]);
}
void fan( int x, int y)
{
int px = find(x);
int py = find(y);
if(px != py)
f[px] = py;
}
int main()
{
int cnt,f0,n,m,x,y;
while(scanf("%d %d", &n, &m) != EOF)
{
for ( int i = 0; i<maxn; i++)
f[i] = i;
for( int i = 0; i<m; i++)
{
scanf("%d %d", &x, &y);
fan(x,y);
}
cnt = 1;
f0 = find(0);
for( int i = 1; i<n; i++)
if(f0 == find(i))
cnt++;
printf("%d\n",cnt);
}
return 0;
}
#include <string.h>
#include <stdio.h>
using namespace std;
#define maxn 50005
int f[maxn];
int find( int x)
{
if( x != f[x])
return f[x] = find(f[x]);
}
void fan( int x, int y)
{
int px = find(x);
int py = find(y);
if(px != py)
f[px] = py;
}
int main()
{
int cnt,f0,n,m,x,y;
while(scanf("%d %d", &n, &m) != EOF)
{
for ( int i = 0; i<maxn; i++)
f[i] = i;
for( int i = 0; i<m; i++)
{
scanf("%d %d", &x, &y);
fan(x,y);
}
cnt = 1;
f0 = find(0);
for( int i = 1; i<n; i++)
if(f0 == find(i))
cnt++;
printf("%d\n",cnt);
}
return 0;
}