#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,m;
vector<int>a[N];
int dfn[N],low[N],to[N];
void add(int m){
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
a[x].push_back(y);
}
}
int e[N],in[N],f[N],gs[N],num=0,cnt=0;
stack<int>q;
void tarjan(int u)
{
low[u]=dfn[u]=++cnt;
in[u]=1;
q.push(u);
for(int i=e[u];i<a[u].size();i=e[u])
{
e[u]++;
int v=a[u][e[i]];
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(in[v])low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
++num;
while(q.top()!=u){
int v=q.top();
f[v]=num;
gs[num]++;
in[v]=0;
q.pop();
}
int v=q.top();
f[v]=num;
gs[num]++;
in[v]=0;
q.pop();
}
}
int out()
{
if(num==1){
return n;
}
for(int i=1;i<=n;i++){
for(int j=0;j<a[i].size();j++)
{
if(f[i]==f[a[i][j]])continue;
to[f[i]]++;
}
}
int f0=0,f1;
for(int i=1;i<=num;i++)
{
if(to[i]==0)f0++,f1=i;
}
if(f0==1)return gs[f1];
else return 0;
}
signed main()
{
cin>>n>>m;
add(m);
for(int i=1;i<=n;i++)
{
if(dfn[i]==0)tarjan(i);
}
cout<<out();
return 0;
}