#include<bits/stdc++.h>
#define int long long
using namespace std;
struct targanzqq{
stack<int> st;
int dfn[100001],low[100001],in[100001],vis[100001],sz[100001];
vector<int> t[100001],scc[100001];
int tot,cnt;
void find(int now){
dfn[now]=++tot;
low[now]=tot;
vis[now]=1;
st.push(now);in[now]++;
for(auto i:t[now]){
if(!dfn[i]){
find(i);
low[now]=min(low[now],low[i]);
}
else if(in[i]){
low[now]=min(low[now],dfn[i]);
}
}
if(dfn[now]==low[now]){
int y,siz=0;cnt++;
do{
y=st.top();
in[y]=0;
siz++;
st.pop();
scc[cnt].push_back(y);
}while(y!=now);
sz[cnt]=siz;
}
}
}targan;
int n,m,fst[100001],dg[100001],dg2[100001];
vector<int> ans[100001];
signed main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
targan.t[a].push_back(b);
dg[a]++;
}
for(int i=1;i<=n;i++){
if(!targan.vis[i]){
targan.find(i);
}
}
int res=0,ans=0;
for(int i=1;i<=targan.cnt;i++){
for(auto j:targan.scc[i]){
dg2[i]+=dg[j];
//cout<<j<<" ";
}
//cout<<endl;
if(dg2[i]==0&&res){
ans=0;break;
}
if(dg2[i]!=0)continue;
ans=targan.sz[i];
res=i;
}
cout<<ans;
}
一直是48pts