#include<stdio.h>
int guanxi[1100];
int find(int a)
{
if(guanxi[a]==a)
return a;
else
return guanxi[a]=find(guanxi[a]); //寻找关系
}
int lianjie(int a,int b)
{
int x,y;
x=find(a);
y=find(b); //找连接
guanxi[x]=y; //建立于最开始的那个元素的链接
}
int main()
{
int n,m;
int a,b;
int i,j,sum;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(i=0;i<=1000;i++)
guanxi[i]=i; 讲所有元素初始化为只跟自己有关系
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
lianjie(a,b); 找连接
}
sum=0;
for(i=1;i<=n;i++)
if(guanxi[i]==i)
sum++;
printf("%d\n",sum-1);
}
return 0;
}
int guanxi[1100];
int find(int a)
{
if(guanxi[a]==a)
return a;
else
return guanxi[a]=find(guanxi[a]); //寻找关系
}
int lianjie(int a,int b)
{
int x,y;
x=find(a);
y=find(b); //找连接
guanxi[x]=y; //建立于最开始的那个元素的链接
}
int main()
{
int n,m;
int a,b;
int i,j,sum;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(i=0;i<=1000;i++)
guanxi[i]=i; 讲所有元素初始化为只跟自己有关系
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
lianjie(a,b); 找连接
}
sum=0;
for(i=1;i<=n;i++)
if(guanxi[i]==i)
sum++;
printf("%d\n",sum-1);
}
return 0;
}