#include <stdio.h>

int total;
int pre[1001];

void init(int n){
	int i;
	for(i=1;i<=n;++i){
		pre[i] = i;
	}
}

int root(int x){

	if(x!=pre[x]){
		pre[x] = root(pre[x]);
	}
	return pre[x];
}

void merge(int a,int b){

	int x = root(a);
	int y = root(b);
	if(x!=y){
		pre[x]=y;
		--total;
	}
}

int main(){
	int N,M,i,st,end;
	while(scanf("%d",&N) && N){
		
		scanf("%d",&M);

		init(N);

		total = N-1;

		for(i=0;i<M;++i){
			scanf("%d %d",&st,&end);
			merge(st,end);
		}
		printf("%d\n",total);
	}
	return 0;
}

/**************************************************************
	Problem: 2203
	User: admin
	Language: C
	Result: Accepted
	Time:10 ms
	Memory:1148 kb
****************************************************************/