#include<bits/stdc++.h>
using namespace std;
bool vis1[10005], vis2[10005];
int n, m, _1, _2, t, d[10005], vis[10005], ans;
vector<int> e1[10005], e2[10005];
void DFS_1(int u){
vis1[u] = true;
for(auto v : e1[u]){
if(!vis1[v]){
DFS_1(v);
}
}
d[++t] = u;
return;
}
void DFS_2(int u){
vis2[u] = true;
vis[u] = t;
for(auto v : e2[u]){
if(!vis2[v]){
DFS_2(v);
}
}
return;
}
int main(){
scanf("%d %d", &n, &m);
for(int i = 1;i <= m;i++){
scanf("%d %d", &_1, &_2);
e1[_1].push_back(_2);
e2[_2].push_back(_1);
}
for(int i = 1;i <= n;i++){
if(!vis1[i]){
DFS_1(i);
}
}
t = 0;
for(int i = n;i >= 1;i--){
if(!vis2[i]){
t++;
DFS_2(i);
}
}
if(t >= 2){
printf("0");
return 0;
}
for(int i = 1;i <= n;i++){
if(e1[i].size() == 0){
ans++;
}
if(ans >= 2){
printf("0");
return 0;
}
}
if(ans == 1){
printf("1");
}else if(ans == 0){
printf("%d", n);
}else{
printf("0");
}
return 0;
}