#include <bits/stdc++.h>
#define N 1e6+5
using namespace std;
vector <int> G[int(N)];
stack <int> stk;
int n,m,dfn[int(N)],siz[int(N)],sum,low[int(N)],col,scc[int(N)],cnt,idx,out[int(N)];bool ins[int(N)];
void trajan(int u){
dfn[u] = low[u] = ++idx;
stk.push(u);
ins[u] = 1;
for (int i = 0;i < G[u].size();i++){
int v = G[u][i];
if (!dfn[v]){
trajan(v);
low[u] = min(low[u],low[v]);
}else if (ins[v]) low[u] = min(low[u],dfn[v]);
}
if (dfn[u] == low[u]){
int v;col++;
do{
v = stk.top();
scc[v] = col;
ins[v] = 0;
++siz[col];
stk.pop();
}while (u != v);
}
}
signed main(){
cin >> n >> m;
int u,v;
while (m--){
cin >> u >> v;
G[u].push_back(v);
}
for (int i = 1;i <= n;i++)
if (!dfn[i]) trajan(i);
for (int i = 1;i <= n;i++)
for (int j = 0;j < G[n].size();j++)
if (scc[i] != scc[j])
out[scc[i]]++;
for (int i = 1;i <= col;i++) if (!out[i]) sum = siz[i],cnt++;
if (cnt > 1) sum = 0;
cout << sum;
return 0;
}