#include <iostream> using namespace std; const int maxn=1000; int father[maxn]; int height[maxn]; void init(){ for(int i=0;i<maxn;i++){ father[i]=i; } } int findfather(int x){ if(father[x]!=x) father[x]=findfather(father[x]); return father[x]; } void Union(int x,int y){ x=findfather(x); y=findfather(y); if(x==y) return; else if(height[x]<height[y]) father[x]=y; else if(height[x]>height[y]) father[y]=x; else{ father[y]=x; height[x]++; } } int main() { int n,m; while(cin>>n>>m){ init(); for(int i=0;i<m;i++){ int a,b; cin>>a>>b; int f1=findfather(a); int f2=findfather(b); if(f1!=f2){ Union(a,b); } } int l=0; for(int i=1;i<=n;i++){ if(father[i]==i) l++; } cout<<l-1<<endl; } }