#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010,M = 50010;
int n,m;
int h[N],e[M],ne[M],idx;//建图
int scc_cnt,id[N],timestamp;//强连通
int stk[N],top;
bool in_stk[N];
int dfn[N],low[N];
int dout[N];
int total[N];
void add(int a,int b){
e[idx] = b,ne[idx] = h[a],h[a] = idx++;
}
void tarjan(int u){
dfn[u] = low[u] = ++timestamp;
stk[++top] = u;in_stk[u] = true;
for(int i = h[u];~i;i = ne[i]){
int j = e[i];
if(!dfn[j]){
tarjan(j);
low[u] = min(low[u],low[j]);
}else if(in_stk[j])
low[u] = min(low[j],low[u]);
}
if(dfn[u] == low[u]){
++scc_cnt;
int y;
do{
y = stk[top--];
in_stk[y] = false;
id[y] = scc_cnt;
total[scc_cnt]++;
}while(y != u);
}
}
int main(){
cin >> n >> m;
memset(h,-1,sizeof h);
for(int i = 0;i < m;i++){
int a,b;cin >> a >> b;
add(a,b);
}
for(int i = 1;i <= n;i++)
if(!dfn[i])tarjan(i);
for(int i = 1;i <= n;i++){
for(int j = h[i];j != -1;j = ne[j]){
int a = i,b = e[j];
if(id[a] != id[b]){
dout[id[a]]++;
}
}
}
int zeros = 0,sum = 0;
for(int i = 1;i <= scc_cnt;i++){
if(!dout[i]){
zeros++;
sum += total[i];
}
if(zeros > 1){
sum = 0;
break;
}
}
cout << sum << endl;
return 0;
}