#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 5e4 + 5;
int n, m;
vector<int> adj[N];
bool visited[N];
bitset<N> bs[N]; // bs[u] là bitset đại diện cho tập đỉnh mà u đến được
void dfs(int u) {
visited[u] = true;
bs[u][u] = 1;
for (int v : adj[u]) {
if (!visited[v]) dfs(v);
bs[u] |= bs[v];
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
}
// O(m * n / w) (w = 32 hoặc 64)
for (int u = 1; u <= n; u++) {
if (!visited[u]) dfs(u);
}
for (int u = 1; u <= n; u++) {
cout << bs[u].count() << ' ';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSA1ZTQgKyA1OyAKCmludCBuLCBtOyAKdmVjdG9yPGludD4gYWRqW05dOyAKYm9vbCB2aXNpdGVkW05dOyAKYml0c2V0PE4+IGJzW05dOyAvLyBic1t1XSBsw6AgYml0c2V0IMSR4bqhaSBkaeG7h24gY2hvIHThuq1wIMSR4buJbmggbcOgIHUgxJHhur9uIMSRxrDhu6NjCgp2b2lkIGRmcyhpbnQgdSkgewoJdmlzaXRlZFt1XSA9IHRydWU7IAoJYnNbdV1bdV0gPSAxOyAgCgoJZm9yIChpbnQgdiA6IGFkalt1XSkgewoJCWlmICghdmlzaXRlZFt2XSkgZGZzKHYpOyAKCQlic1t1XSB8PSBic1t2XTsgCgl9Cn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG07IAoKCWZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CgkJaW50IHUsIHY7IAoJCWNpbiA+PiB1ID4+IHY7IAoJCWFkalt1XS5wdXNoX2JhY2sodik7IAoJfQoKCS8vIE8obSAqIG4gLyB3KSAodyA9IDMyIGhv4bq3YyA2NCkKCWZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgeyAKCQlpZiAoIXZpc2l0ZWRbdV0pIGRmcyh1KTsgCgl9CgoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJY291dCA8PCBic1t1XS5jb3VudCgpIDw8ICcgJzsgCgl9Cn0K