#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T t) {
  return t < 0 ? -t : t;
}
const long long modn = 1000000007;
inline long long mod(long long x) { return x % modn; }
const int MAXN = 212345;
int n, m, k;
int s[MAXN];
int deg[MAXN];
queue<int> q;
queue<int> h;
vector<int> adj[MAXN];
void add(int u) {
  if (deg[u]) return;
  if (s[u] == 0)
    q.push(u);
  else
    h.push(u);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int a = 0; a < n; a++) {
    scanf("%d", &s[a]);
  }
  for (int a = 0; a < m; a++) {
    int i, j;
    scanf("%d %d", &i, &j);
    adj[j].push_back(i);
    deg[i]++;
  }
  for (int a = 0; a < n; a++) add(a);
  int cnt = 0;
  int res = 0;
  while (cnt < n) {
    while (!q.empty()) {
      cnt++;
      int u = q.front();
      q.pop();
      for (int nxt : adj[u]) {
        deg[nxt]--;
        add(nxt);
      }
    }
    if (cnt != n) {
      res++;
      while (!h.empty()) {
        cnt++;
        int u = h.front();
        h.pop();
        for (int nxt : adj[u]) {
          deg[nxt]--;
          add(nxt);
        }
      }
    }
  }
  printf("%d\n", res);
}
