P1015

#include <bits/stdc++.h>

typedef long long i64;
const int N = 200010, M = 500010;
int n, m;
struct DSU {
    int pa[N], large[N];

    void init(int upb) {
        for (int i = 1; i <= upb; ++ i) {
            pa[i] = i, large[i] = 1;
        }
        return;
    }
    int find(int x) {
        return (x == pa[x]) ? x : (pa[x] = find(pa[x]));
    }
    void unify(int x, int y) {
        x = find(x), y = find(y);
        if (x == y) {
            return;
        }
        if (large[x] < large[y]) {
            pa[x] = y;
            large[y] += large[x];
        } else {
            pa[y] = x;
            large[x] += large[y];
        }
        return;
    }
}dsu;
struct Edge {
    int u, v, w;
}e[M];

bool cmp(const Edge &x, const Edge &y) {
    return x.w < y.w;
}

int main(void) {
    scanf("%d%d", &n, &m);
    dsu.init(n);
    for (int i = 1; i <= m; ++ i) {
        scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
    }
    std::sort(e + 1, e + m + 1, cmp);

    for (int i = 1; i <= m; ++ i) {
        if (dsu.find(e[i].u) != dsu.find(e[i].v)) {
            dsu.unify(e[i].u, e[i].v);
            printf("%d\n", dsu.large[dsu.find(e[i].u)]);
        }
    }

    return 0;
}