#include <bits/stdc++.h>
#define pub push_back
#define FOR(i, l, r, x) for(int i = l; i <= r; i += x)
#define FOD(i, l, r, x) for(int i = l; i >= r; i -= x)
#define pii pair<int, int>
#define fi first
#define se second
#define int long long
using namespace std;
const int N = 5e5 + 5;
const int M = 350;
const int LOG = 19;
const int inf = 3e18;
int n, m;
int scc = 0, cnt = 0;
int vis[N], low[N], id[N], del[N];
int cc[N], sz[N];
int in[N], out[N];
stack <int> st;
vector <int> a[N];
vector <pii> edge;
void tarjan(int u) {
vis[u] = 1;
low[u] = id[u] = ++cnt;
st.push(u);
for(int v : a[u]) {
if (del[v]) continue;
if (!vis[v]) {
tarjan(v);
low[u] = min(low[u], low[v]);
}
else low[u] = min(low[u], id[v]);
}
if (low[u] == id[u]) {
scc ++;
int v;
do {
v = st.top(); st.pop();
del[v] = 1;
cc[v] = scc;
sz[scc] ++;
} while(u != v);
}
}
void solve() {
cin >> n >> m;
FOR(i, 1, m, 1) {
int u, v;
cin >> u >> v;
a[u].pub(v);
edge.pub({u, v});
}
FOR(i, 1, n, 1) if (!vis[i]) tarjan(i);
for(pii x : edge) {
int u = cc[x.fi];
int v = cc[x.se];
if (u != v) {
in[v] ++;
out[u] ++;
}
}
int cnt = 0;
int ans = 0;
FOR(i, 1, n, 1) {
if (!out[i]) {
cnt ++;
if (cnt == 2) {
return (void)(cout << 0 << '\n');
}
ans += sz[i];
}
}
cout << ans << '\n';
}
signed main() {
#define name "baitap"
if (ifstream(name".inp")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcHViIHB1c2hfYmFjawojZGVmaW5lIEZPUihpLCBsLCByLCB4KSBmb3IoaW50IGkgPSBsOyBpIDw9IHI7IGkgKz0geCkKI2RlZmluZSBGT0QoaSwgbCwgciwgeCkgZm9yKGludCBpID0gbDsgaSA+PSByOyBpIC09IHgpCiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDVlNSArIDU7CmNvbnN0IGludCBNID0gMzUwOwpjb25zdCBpbnQgTE9HID0gMTk7CmNvbnN0IGludCBpbmYgPSAzZTE4OwoKaW50IG4sIG07CgppbnQgc2NjID0gMCwgY250ID0gMDsKaW50IHZpc1tOXSwgbG93W05dLCBpZFtOXSwgZGVsW05dOwppbnQgY2NbTl0sIHN6W05dOwppbnQgaW5bTl0sIG91dFtOXTsKCnN0YWNrIDxpbnQ+IHN0Owp2ZWN0b3IgPGludD4gYVtOXTsKdmVjdG9yIDxwaWk+IGVkZ2U7Cgp2b2lkIHRhcmphbihpbnQgdSkgewogICAgdmlzW3VdID0gMTsKICAgIGxvd1t1XSA9IGlkW3VdID0gKytjbnQ7CiAgICBzdC5wdXNoKHUpOwogICAgZm9yKGludCB2IDogYVt1XSkgewogICAgICAgIGlmIChkZWxbdl0pIGNvbnRpbnVlOwogICAgICAgIGlmICghdmlzW3ZdKSB7CiAgICAgICAgICAgIHRhcmphbih2KTsKICAgICAgICAgICAgbG93W3VdID0gbWluKGxvd1t1XSwgbG93W3ZdKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBsb3dbdV0gPSBtaW4obG93W3VdLCBpZFt2XSk7CiAgICB9CiAgICBpZiAobG93W3VdID09IGlkW3VdKSB7CiAgICAgICAgc2NjICsrOwogICAgICAgIGludCB2OwogICAgICAgIGRvIHsKICAgICAgICAgICAgdiA9IHN0LnRvcCgpOyBzdC5wb3AoKTsKICAgICAgICAgICAgZGVsW3ZdID0gMTsKICAgICAgICAgICAgY2Nbdl0gPSBzY2M7CiAgICAgICAgICAgIHN6W3NjY10gKys7CiAgICAgICAgfSB3aGlsZSh1ICE9IHYpOwogICAgfQp9CnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgRk9SKGksIDEsIG0sIDEpIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGFbdV0ucHViKHYpOwogICAgICAgIGVkZ2UucHViKHt1LCB2fSk7CiAgICB9CgogICAgRk9SKGksIDEsIG4sIDEpIGlmICghdmlzW2ldKSB0YXJqYW4oaSk7CgogICAgZm9yKHBpaSB4IDogZWRnZSkgewogICAgICAgIGludCB1ID0gY2NbeC5maV07CiAgICAgICAgaW50IHYgPSBjY1t4LnNlXTsKICAgICAgICBpZiAodSAhPSB2KSB7CiAgICAgICAgICAgIGluW3ZdICsrOwogICAgICAgICAgICBvdXRbdV0gKys7CiAgICAgICAgfQogICAgfQoKICAgIGludCBjbnQgPSAwOwogICAgaW50IGFucyA9IDA7CgogICAgRk9SKGksIDEsIG4sIDEpIHsKICAgICAgICBpZiAoIW91dFtpXSkgewogICAgICAgICAgICBjbnQgKys7CiAgICAgICAgICAgIGlmIChjbnQgPT0gMikgewogICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkKShjb3V0IDw8IDAgPDwgJ1xuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYW5zICs9IHN6W2ldOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7Cn0Kc2lnbmVkIG1haW4oKSB7CiAgICAjZGVmaW5lIG5hbWUgImJhaXRhcCIKICAgIGlmIChpZnN0cmVhbShuYW1lIi5pbnAiKSkgewogICAgICAgIGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihuYW1lIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKCiAgICBzb2x2ZSgpOwp9