/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
*/
/*
#include <stdio.h>
int a[101][101]={};
int visit[101]={};
int e=0;
int n;
void view(){
printf("visit : ");
for(int i=0;i<n;i++){
printf("%d ",visit[i]);
}
printf("\n");
}
/*
void r()
{
for(int j=turn[h];j<n;j++)
{
if(j==n-1&&visit[j]==1)
{
h=before[h];
view();
}
else if(a[h][j]==1&&visit[j]==0)
{
o=h;
turn[h]=j;
visit[j]=1;
e++;
h=j;
before[h]=o;
view();
}
else if(h==0&&j==n-1&&visit[j]==1)
{
return e;
}
}
}
*/
/*
void dfs(int node)
{
visit[node]=1;
for(int i=0;i<n;i++)
{
if(a[node][i]==1 &&visit[i]==0 )// node와 연결되어있으면서, 방문하지 않은 노드에서 dfs 시작
{
e++;
dfs(i);
}
}
}
int main()
{
int b,i,j;
scanf("%d",&n);
scanf("%d",&b);
for(int k=1;k<=b;k++)
{
scanf("%d %d",&i,&j);
a[i-1][j-1]=1;
a[j-1][i-1]=1;
}
dfs(0); // node 1 에서 dfs 를 시작하세요
printf("%d",e);
}
*/
#include <stdio.h>
int a[101][101]={};
int visit[101];
int e=0;
int n;
void dfs(int node)
{
visit[node]=1;
for(int i=0;i<n;i++)
{
if(a[node][i]==1&&visit[i]==0)
{
e=e+1;
dfs(i);
}
}
}
int main()
{
int b,i,j;
scanf("%d",&n);
scanf("%d",&b);
for(int k=1;k<=b;k++)
{
scanf("%d %d",&i,&j);
a[i-1][j-1]=1;
a[j-1][i-1]=1;
}
dfs(0);
printf("%d",e);
}



