#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <memory.h>
using namespace std;
int N,M;
int a,b;
int flag[1005][1005];
int vis[1005];
vector<int> V[1005];
void dfs(int a,int t){
vis[a]=1;
flag[a][t]=flag[t][a]=1;
for(int i=0;i<V[a].size();i++){
if(!vis[V[a][i]]){
dfs(V[a][i],t);
}
}
}
int main() {
cin>>N>>M;
memset(flag,0,sizeof(flag));
for(int i=1;i<=M;i++){
int a,b;
cin>>a>>b;
V[a].push_back(b);
}
for(int i=1;i<=N;i++){
memset(vis,0,sizeof(vis));
dfs(i,i);
}
int ans=0;
for(int i=1;i<=N;i++){
bool find_flag=true;
for(int j=1;j<=N;j++){
if(!flag[i][j]){
find_flag=false;
break;
}
}
if(find_flag){
ans++;
}
}
cout<<ans<<endl;
return 0;
}