#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n, m, vs[maxn];
int a[maxn], ans, d[maxn], pa[maxn];
vector<int> adj[maxn];
void dfs(int u) {
  if (vs[u]) return;
  vs[u] = 1;
  int check = 1;
  int zo = 0;
  for (int v : adj[u]) {
    dfs(v);
    if (d[u] < d[v]) {
      check = a[v];
      d[u] = d[v];
    } else if (d[u] == d[v]) {
      check &= a[v];
    }
    zo = 1;
  }
  if (a[u]) {
    if (zo) {
      d[u] += (check ^ 1);
    } else {
      d[u] = 1;
    }
  }
  ans = max(ans, d[u]);
}
int main(int argc, char* argv[]) {
  if (argc > 1) {
    freopen(argv[1], "r", stdin);
  }
  cin >> n >> m;
  for (int i = (0); i < (n); i++) cin >> a[i];
  for (int i = (0); i < (m); i++) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(y);
    pa[y] = 1;
  }
  for (int i = (0); i < (n); i++) {
    if (!pa[i]) {
      dfs(i);
    }
  }
  cout << ans;
  return 0;
}
