#include <bits/stdc++.h>
using namespace std;
#define int long long
vector <int> e[20005], ql[20005], ee[20005];
int dfn[20005], l[20005], cnt, vis[20005], viss[20005];
int cntt;
int ans[200005];
stack <int> st;
int tot;
int qll[20005];
map <pair <int, int>, int> mp;
int n, m;
void dfs(int u) {
dfn[u] = ++cnt;
vis[u] = 1;
l[u] = dfn[u];
viss[u] = 1;
st.push(u);
for (int i = 0; i < e[u].size(); i ++) {
int v = e[u][i];
if (dfn[u] == 0) {
dfs(v);
l[u] = min(l[u], l[v]);
} else if (viss[u] == 1) {
l[u] = min(l[u], dfn[v]);
}
}
if (dfn[u] == l[u]) {
tot ++;
int x;
do {
x = st.top();
st.pop();
ql[tot].push_back(x);
viss[x] = 0;
qll[x] = tot;
} while (x != u);
}
}
signed main() {
cin >> n >> m;
while (m --) {
int x, y;
cin >> x >> y;
e[x].push_back(y);
}
for (int i = 1; i<=n; i ++)if(!dfn[i])dfs(i);
int cnttt = 0;
for (int i = 1; i <= n; i ++) {
for (int j = 0; j < e[i].size(); j ++) {
int v = e[i][j];
if (qll[i] != qll[v]) {
ee[qll[i]].push_back(qll[v]);
}
}
}
vector <int> anss;
for (int i = 1; i <= tot; i ++) {
if (ee[i].size() == 0)
anss.push_back(i);
}
if (anss.size() != 1) {
cout << 0;
return 0;
}
int cntttt = 0;
cout << ql[anss[0]].size();
}