#include <bits/stdc++.h>
using namespace std;
vector<int> a[200005];
int n, m, ss, tt, vis[200005], opt[200005];
void add(int x, int y) { a[x].push_back(y); }
void bfs(int s, int t) {
  queue<int> q;
  vis[s] = 1;
  q.push(s);
  while (!q.empty()) {
    int v = q.front();
    q.pop();
    if (v == t) continue;
    for (int i = 0; i < a[v].size(); i++) {
      int u = a[v][i];
      if (!vis[u]) vis[u] = 1, q.push(u);
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  ss = n * 2 + 1;
  tt = n * 2 + 2;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &opt[i]);
    if (opt[i] == 1) add(ss, i), add(i + n, tt);
    if (opt[i] == 2) add(i, tt), add(ss, i + n);
  }
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (opt[y] != 1) add(x, y), add(y + n, x + n);
  }
  bfs(ss, tt);
  bfs(tt, ss);
  for (int i = 1; i <= n; i++) printf("%d\n", vis[i] && vis[i + n]);
  return 0;
}
