#includeint father[1005],depth[1005];void init(){ int i; for(i = 1; i < 1005;i ++) { father[i] = i; depth[i] = 0; }}int find(int x){ if(x==father[x]) return x; else return father[x] = find(father[x]); //优化树的高度;}void unit(int x,int y){ x = find(x); y = find(y); if(x==y) return ; if(depth[x] depth[y]) father[y] = father[x]; else { father[x] = father[y]; depth[y]++; } }}int main(){ int n,m,a,b,j,gr; while(~scanf("%d%d",&n,&m)&&n!=0) { gr = 0; init(); while(m--) { scanf("%d%d",&a,&b); unit(a,b); } for(j = 1;j <= n;j ++) { if(j==father[j]) gr++; } printf("%d\n",gr-1); } return 0;}