#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int> v[10005],v1[10005];
int dfn[10005],low[10005],stk[10005],fa[10005];
int num[10005];
int x[50005],y[50005];
bool instk[10005],cnt[10005];
int deep,top;
void dfs(int o)
{
dfn[o]=low[o]=++deep;
stk[++top]=o;
instk[o]=1;
for(int i:v[o])
{
if(!dfn[i])
{
dfs(i);
low[o]=min(low[o],low[i]);
}
else if(!instk[i])
{
low[o]=min(low[o],dfn[i]);
}
}
if(dfn[o]==low[o])
{
while(stk[top]!=o)
{
instk[stk[top]]=0;
fa[stk[top]]=o;
top--;
}
fa[o]=o;
top--;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x[i],&y[i]);
v[x[i]].emplace_back(y[i]);
}
if(m<n-1)
{
printf("0\n");
return 0;
}
for(int i=1;i<=n;i++)
{
if(!fa[i])
{
dfs(i);
}
}
vector<int> q;
for(int i=1;i<=n;i++)
{
if(fa[i]==i)
{
q.emplace_back(i);
}
num[fa[i]]++;
}
if(q.size()==1)
{
printf("%d",n);
return 0;
}
for(int i=1;i<=m;i++)
{
if(fa[x[i]]!=fa[y[i]])
{
v1[fa[x[i]]].emplace_back(fa[y[i]]);
cnt[fa[x[i]]]=1;
}
}
int sum=0,ans1;
for(int i:q)
{
if(!cnt[fa[i]])
{
sum++;
ans1=num[fa[i]];
}
}
if(sum>1)printf("0\n");
else printf("%d",ans1);
return 0;
}