#include <bits/stdc++.h>
using namespace std;
vector<int> e[2][100000];
vector<int> s[2];
int f[100000];
bool used[2][100000];
void bfs(int n, int t) {
  int i;
  for (i = 0; i < n; i++) used[t][i] = false;
  queue<int> que;
  for (i = 0; i < s[t].size(); i++) {
    used[t][s[t][i]] = true;
    que.push(s[t][i]);
  }
  while (!que.empty()) {
    int v = que.front();
    que.pop();
    for (i = 0; i < e[t][v].size(); i++) {
      if (!used[t][e[t][v][i]]) {
        used[t][e[t][v][i]] = true;
        if (t == 1 && f[e[t][v][i]] == 1) continue;
        que.push(e[t][v][i]);
      }
    }
  }
}
int main() {
  int n, m, i;
  scanf("%d %d", &n, &m);
  for (i = 0; i < n; i++) {
    scanf("%d", &f[i]);
    if (f[i] > 0) s[f[i] - 1].push_back(i);
  }
  for (i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    a--;
    b--;
    e[0][a].push_back(b);
    e[1][b].push_back(a);
  }
  bfs(n, 0);
  bfs(n, 1);
  for (i = 0; i < n; i++) printf("%d\n", used[0][i] && used[1][i] ? 1 : 0);
  return 0;
}
