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
****************************************************************/