#include<bits/stdc++.h>
using namespace std;
const int N=1e4+100;
int n,m,u,v,top,cnt,ans,c,a[N],b[N],out[N],low[N],dfn[N],vis[N];vector<int>g[N];stack<int>st;
void dfs(int x){
dfn[x]=low[x]=++top,vis[x]=1,st.push(x);
for(auto i:g[x]){
if(!dfn[i])dfs(i),low[x]=min(low[x],low[i]);
else if(vis[i])low[x]=min(low[x],dfn[i]);
}if(low[x]==dfn[x]){
++cnt;
while(st.top()!=x)a[st.top()]=cnt,++b[cnt],vis[st.top()]=0,st.pop();
a[st.top()]=cnt,++b[cnt],vis[st.top()]=0,st.pop();
}
}int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>u>>v,g[u].push_back(v);
dfs(1);
for(int i=1;i<=n;i++)for(auto j:g[i])if(a[i]!=a[j])++out[a[i]];
for(int i=1;i<=cnt;i++)if(!out[i])++c,ans+=b[i];
return cout<<(c==1)*ans,0;
}