#include <bits/stdc++.h>
using namespace std;
int vet[100010], cx[100010];
int a[100010], d[100010], kt[100010];
vector<int> V[100010];
int ans;
void dfs(int u) {
  if (vet[u]) return;
  vet[u] = 1;
  int flag = 1;
  int zo = 0;
  for (int v : V[u]) {
    dfs(v);
    if (d[u] < d[v]) {
      flag = a[v];
      d[u] = d[v];
    } else if (d[u] == d[v]) {
      flag &= a[v];
    }
    zo = 1;
  }
  if (a[u]) {
    if (zo) {
      d[u] += (flag ^ 1);
    } else {
      d[u] = 1;
    }
  }
  ans = max(ans, d[u]);
}
int main() {
  int n, m, pa[100010];
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    V[a].push_back(b);
    pa[b] = 1;
  }
  for (int i = 0; i < n; i++) {
    if (!pa[i]) {
      dfs(i);
    }
  }
  cout << ans;
  return 0;
}
