//将每个元素看为一个集合,然后通过并查集合并集合,然后再将余下的集合连接起来即可
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n,m;
    while(cin>>n>>m){
        int t=n;
        vector<int> v(n+1,-1);
        while(m--){
            int x,y;
            cin>>x>>y;
            int a=x,b=y;
            while(v[a]!=-1)a=v[a];//找代表元素
            while(v[b]!=-1)b=v[b];
            if(a==b)continue;
            else v[b]=x,t-=1;//合并集合
        }
        v.clear();
        cout<<t-1<<endl;
    }
}