#include <stdio.h>
int set[1001];
int SetFind(int x)
{
if (set[x] < 0)
return x;
else
return set[x] = SetFind(set[x]);
}
void SetUnion(int a, int b)
{
int A = SetFind(a), B = SetFind(b);
if (A == B)
return ;
if (set[A] < set[B])
{
set[A] += set[B], set[B] = A;
}
else
{
set[B] += set[A], set[A] = B;
}
return ;
}
int main(void)
{
while (1)
{
int n, m;
if (scanf("%d%d", &n, &m) == EOF)
break;
if (m == 0)
{
scanf("%*d");
printf("%d\n", n - 1);
}
else
{
for (int i = 1; i <= n; i++)
set[i] = -1;
int a, b;
while (m--)
{
scanf("%d%d", &a, &b);
SetUnion(a, b);
}
int ans = -1;
for (int i = 1; i <= n; i++)
if (set[i] < 0)
ans++;
printf("%d\n", ans);
}
}
return 0;
}