#include<bits/stdc++.h>
using namespace std;
int n,m,cent,h[312122],colortime=1,curtime=1,dout[312122];
int dfn[342122],low[312122],color[311223];
int tong[312122];
stack<int> s;
struct node{
int vi,nt;
}e[592231];
void add(int x,int y){
e[cent].vi=y;
e[cent].nt=h[x];
h[x]=cent;
cent++;
}
int tarjan(int x){
dfn[x]=low[x]=curtime;
curtime++;
s.push(x);
for(int i=h[x];i!=-1;i=e[i].nt){
int u=e[i].vi;
if(dfn[u]==0){
low[x]=min(low[x],tarjan(u));
}
else{
if(color[u]==0){
low[x]=min(low[x],dfn[u]);
}
}
}
if(dfn[x]==low[x]){
while(s.top()!=x){
int t=s.top();
s.pop();
color[x]=colortime;
tong[colortime]++;
}
color[s.top()]=colortime;
tong[colortime]++;
s.pop();
colortime++;
}
return low[x];
}
int main(){
cin>>n>>m;
for(int i=0;i<=n;i++){
h[i]=-1;
}
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
add(x,y);
}
for(int i=1;i<=n;i++){
if(dfn[i]==0){
tarjan(i);
}
}
for(int i=1;i<=n;i++){
for(int j=h[i];j!=-1;j=e[j].nt){
int u=e[j].vi;
if(color[i]!=color[u]){
dout[color[i]]++;
}
}
}
int ans=0,sum=0;
for(int i=1;i<colortime;i++){
if(dout[i]==0){
ans++;
sum+=tong[i];
}
}
if(ans==1){
cout<<sum<<endl;
}
else{
cout<<0<<endl;
}
}