#include<stdio.h> int 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[x] = father[y]; } else { 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; }