#include <stdio.h>
int pre[2000];
int fun(int x) -------------------------------------//找x的根节点((((重要函数)))
{
int r = x;
while(pre[r]!=r) (((((不相等就一直查找,,直到相等时查找结束,,,即找到了掌门人))))
r=pre[r];
return r;
}
int main()
{
int n,m,i,x,y,a,b,sum;
while(scanf("%d",&n),n)
{
sum = n-1; //初始化Ans等于N个点联通所需要的最少边的数目!
for(i=1;i<=n;++i)
pre[i]=i;
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&x,&y);
a=fun(x); //x根节点
b=fun(y); //y根节点
if(a!=b) //根节点不同则设一个位另外一个的根
{
pre[b]=a;
sum--; //合并了两颗树,所以需要添加的路径的数目减一!
}
}
printf("%d\n",sum);
}
return 0;
}