#include <bits/stdc++.h>
const int N = 6e5 + 5;
int n, m, ans, f[N], ok[N], q[N], h, t;
int to[N], nx[N], h1[N], h2[N], d1[N], d2[N], sze;
inline void add(int *H, int *D, int u, int v) {
  to[++sze] = v, nx[sze] = H[u], H[u] = sze, D[v]++;
}
inline void topsort(int *H, int *D) {
  h = 1, t = 0;
  int i, k = 0, u, v, o;
  for (i = 1; i <= n; i++)
    if (!D[i]) q[++t] = i, k++;
  while (h <= t) {
    u = q[h++];
    if (t - h < 0) f[u] += n - k;
    if (t - h == 0) {
      for (i = H[q[h]], o = 1; i && o; i = nx[i])
        if (D[to[i]] == 1) o--;
      if (o)
        f[u] += n - k;
      else
        ok[u] = 1;
    }
    for (i = H[u]; i; i = nx[i])
      if (--D[v = to[i]] == 0) q[++t] = v, k++;
  }
}
int main() {
  scanf("%d%d", &n, &m);
  int u, v;
  while (m--) scanf("%d%d", &u, &v), add(h1, d1, u, v), add(h2, d2, v, u);
  topsort(h1, d1), topsort(h2, d2);
  for (u = 1; u <= n; u++)
    if (!ok[u] && f[u] > n - 3) ans++;
  printf("%d", ans);
  return 0;
}
