#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
using namespace std;
int n,m,u,v,tot,dfn[10001],low[10001],ans;
vector<int> g[10001];
stack<int> s;
bool ins[10001];
void tarjan(int u){
dfn[u]=low[u]=++tot;
s.push(u);
ins[u]=true;
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);
else if(ins[v])low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
int cnt=0;
do{
cnt++;
v=s.top();
s.pop();
ins[v]=false;
}while(u!=v);
ans+=cnt>1;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)scanf("%d%d",&u,&v),g[u].push_back(v);
for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
printf("%d",ans);
}