RT
#include<bits/stdc++.h>
using namespace std;
int father[10001],n,m;
inline int read()
{
int x=0;
char c=getchar();
while(c>='0'&&c<='9')
{
x=(x<<1)+(x<<3)+c-48;
c=getchar();
}
return x;
}
inline void build(int len)
{
for(int i=1;i<=len;i++)
father[i]=i;
}
inline int find(int x)
{
if(father[x]==x) return x;
return father[x]=find(father[x]);
}
inline void unity(int x,int y)
{
int t1=find(x),t2=find(y);
father[t2]=t1;
}
inline bool older(int x)
{
return find(x)==x;
}
int main()
{
//freopen("P1536_out.txt","w",stdout);
while(n=read())
{
m=read();
build(n);
for(int i=1;i<=m;i++)
unity(read(),read());
int ans=0;
for(int i=1;i<=n;i++)
if(older(i)) ans++;
if(ans==1) printf("0\n");
else printf("%d\n",ans-1);
}
return 0;
}