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;
}