import java.util.Scanner;
public class Main{
	static int m,n;
	static int ans=0;
	static int a[]=new int[1000010];
	static int[]pre=new int[1000010];
	static void init() {
		for(int i=0;i<=m;i++) {
			pre[i]=i;
		}
	}
	static int find(int x) {
		if(pre[x]==x) return x;
		return pre[x]=find(pre[x]);
	}
	static void join(int x,int y) {
		int fx=find(x);
		int fy=find(y);
		if(fx!=fy) {
			pre[fx]=fy;
		}
	}
	static boolean judge(int x,int y) {
		return find(x)==find(y);
	}
	public static void main(String[]args) {
		Scanner sc=new Scanner(System.in);
		while(true) {
			for(int i=0;i<=m;i++) a[i]=0;
		m=sc.nextInt();
		if(m==0)break;
		init();
		n=sc.nextInt();
		for(int i=0;i<n;i++) {
			int u=sc.nextInt();
			int v=sc.nextInt();
			join(u, v);
		}for(int i=1;i<=m;i++) {
			a[find(i)]=-1;
			if(a[i]!=-1) ans++;
		}System.out.println(m-ans-1);
		ans=0;
	}
	}
}
/**************************************************************
	Problem: 2203
	User: admin
	Language: Java
	Result: Accepted
	Time:759 ms
	Memory:49696 kb
****************************************************************/