#include <iostream> using namespace std; const int N = 1010; int p[N]; int height[N]; void init(int n){ for(int i=1;i<=n;i++)p[i]=i,height[i]=0; } int find(int a){ if(a!=p[a])p[a]=find(p[a]); return p[a]; } void cUnion(int a, int b){ int x = find(a); int y = find(b); if(x!=y){ if(height[x]>height[y]){ p[y]=x; }else if(height[x]<height[y]){ p[x]=y; }else{ p[x]=y; height[y]+=height[x]; } } } int main() { int n,m; while(cin>>n>>m){ init(n); while(m--){ int a,b; cin>>a>>b; cUnion(a, b); } int ans=-1; for(int i=1;i<=n;i++){ if(p[i]==i)ans++; } cout<<ans<<endl; } }