#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
int Star[10001];
int n, m;
struct edge
{
int to, next;
}e[50001];
int v[10001];
int cnt;
int read()
{
int x = 0, f = 1;
char c = getchar();
while(! isdigit(c))
{
if(c == '-') f = -1;
c = getchar();
}
while(isdigit(c))
{
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
void add(int from, int to)
{
e[++cnt].to = to;
e[cnt].next = v[from];
v[from] = cnt;
}
bool visited[10001];
int Vcnt;
void dfs(int now, int start)
{
int p = v[now];
visited[now] = true;
if(Vcnt == n)
return;
if(Star[now])
{
Star[start] = true;
Vcnt = n;
return;
}
Vcnt++;
for(; p; p = e[p].next)
{
int q = e[p].to;
if(!visited[q]) dfs(q, start);
}
}
int StarCowCount = 0;
int main()
{
n = read();
m = read();
for(int i = 1; i <= m; i++)
{
int x, y;
x = read();
y = read();
add(y, x);
}
for(int i = 1; i <= n; i++)
{
dfs(i, i);
if(Vcnt == n)
{
StarCowCount++;
Star[i] = true;
}
Vcnt = 0;
for(int i = 1; i <= n; i++)
{
if(visited[i]) visited[i] = 0;
}
}
printf("%d", StarCowCount);
return 0;
}