#include <bits/stdc++.h>
using namespace std;
const int N=5e4+5;
int n,m,dfn[N],vis[N],low[N],t=0,num=0,b[N],cnt[N];
int x[N],y[N],out[N];
vector<int> a[N];
stack<int> s;
void dfs(int x)
{
dfn[x]=low[x]=++t;
s.push(x);
vis[x]=1;
for(int i=0;i<a[x].size();i++)
{
int y=a[x][i];
if(!dfn[y])
{
dfs(y);
low[x]=min(low[x],low[y]);
}
else if(vis[y])
low[x]=min(low[x],low[y]);
}
if(low[x]==dfn[x])
{
num++;
while(s.top()!=x)
{
b[s.top()]=num;//编号
cnt[num]++;
vis[s.top()]=0;
s.pop();
}
b[x]=num;
cnt[num]++;
vis[x]=0;
s.pop();
}
}
int main()
{
scanf("%d%d",&n,&m);
//cin >> n >> m;
for(int i=0;i<m;i++)
{
scanf("%d%d",&x[i],&y[i]);
//cin >> x[i] >> y[i];
a[x[i]].push_back(y[i]);
}
for(int i=1;i<=n;i++)
if(!dfn[i])
dfs(i);
for(int i=0;i<m;i++)//新建图,缩点
{
int x0=b[x[i]],y0=b[y[i]];
if(x0!=y0)
out[x0]++;
}
int res=0,x=0;
for(int i=1;i<=num;i++)
{
if(out[i]==0)
{
x=i;
res++;
}
if(res>1)
{
printf("0\n");
return 0;
}
}
printf("%d\n",cnt[x]);
return 0;
}