#include <stdio.h>
#include <string.h>

int father[1000];
int height[1000];

// Add proper parameter types in function declarations
void intial(int n) {
    for(int i = 0; i < n; i++) {
        father[i] = i;
        height[i] = 0;
    }
}

int Find(int n) {
    if(n != father[n]) {
        father[n] = Find(father[n]);
    }
    return father[n];
}

void Uion(int a, int b) {
    a = Find(a);
    b = Find(b);
    if (a != b) {
        if (height[a] > height[b]) {
            father[b] = a;  // Fix assignment
        }
        else if (height[a] < height[b]) {
            father[a] = b;  // Fix assignment
        }
        else {
            father[a] = b;
            height[b]++;
        }
    }
}

int main() {
    int a, b, c, d;
    while(scanf("%d %d", &a, &b) != EOF) {
        if (a == 0){
            break;
        }
        int ans = -1;
        intial(a);
        for(int i = 0; i < b; i++) {
            scanf("%d %d", &c, &d);
            Uion(c, d);
        }
        for(int i = 0; i < a; i++) {  // Change b to a
            if(i == father[i])
                ans++;
        }
        printf("%d\n", ans);  // Add output statement
    }
    return 0;
}