#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
struct data{
int from,to;
}e[100111];
int tot,head[10011];
void add(int x,int y){
e[++tot].from=head[x];
e[tot].to=y;
head[x]=tot;
}
int dfn[10011],low[10011],cnt,ans;
int stk[10011],top;
int co[10011],si[10011],de[10011],col;
int tarjan(int x){
dfn[x]=low[x]=++cnt;
stk[++top]=x;
for(int i=head[x];i!=0;i=e[i].from){
int v=e[i].to;
if(!dfn[v]){
tarjan(v);
low[x]=min(low[x],low[v]);
}
else if(!co[v]) low[x]=min(low[x],dfn[v]);
}
if(low[x]==dfn[x]){
co[x]=++col;
++si[col];
while(!stk[top]!=x){
++si[col];
co[stk[top]]=col;
top--;
}
--top;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
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=head[i];j!=0;j=e[j].from){
if(co[i]!=co[e[j].to]) de[co[e[j].to]]++;
}
}
int g=0;
for(int i=1;i<=n;i++){
if(!de[i]){
g++;
ans+=si[i];
}
}
if(g==1){
cout<<ans<<endl;
}
else cout<<0<<endl;
return 0;
}