#include <iostream>
#include <vector>
#include <set>
using namespace std;

/* Zbiory rozlaczne */
#define MAX_N 500001

int p[MAX_N],Rank[MAX_N];

inline void makeset(int x) {
	p[x] = x;
  Rank[x] = 0;
}

int findset(int x) {
	if (x != p[x])
    p[x] = findset(p[x]);
	return p[x];
}

inline void link(int x, int y) {
	if (Rank[x] > Rank[y]) {
		p[y] = x;
  } else {
		p[x] = y;
		if (Rank[x] == Rank[y])
      ++Rank[y];
	}
}

inline void unia(int x, int y) {
	link(findset(x), findset(y));
}

int n, m, q;
int b[MAX_N];
vector<int> t[MAX_N];

void odczyt() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    cin >> b[i];
    makeset(i);
  }
  for (int i = 0; i < m; ++i) {
    int u, v;
    cin >> u >> v;
    --u; --v;
    t[u].push_back(v);
    t[v].push_back(u);
    if (!b[u] && !b[v])
      unia(u, v);
  }
}

vector<pair<int, int> > zapyt;
vector<bool> czy_odp;
set<int> zb;

int main() {
  odczyt();
  cin >> q;
  for (int i = 0; i < q; ++i) {
    int x, y;
    cin >> x >> y;
    --x; --y;
    zapyt.push_back(make_pair(x, y));
  }
  czy_odp.resize(q, 1);
  for (int i = q - 1; i >= 0; --i) {
    if (zb.find(zapyt[i].first) != zb.end())
      czy_odp[i] = 0;
    zb.insert(zapyt[i].first);
  }
  for (int i = 0; i < q; ++i) {
    if (!czy_odp[i]) {
      cout << "NIE" << endl;
      continue;
    }
    int x = zapyt[i].first, y = zapyt[i].second;
    bool odp = false;
    if (!b[y])
      for (int j = 0; j < (int)t[x].size(); ++j)
        if (findset(y) == findset(t[x][j]))
          odp = true;
    if (odp) {
      for (int j = 0; j < (int)t[x].size(); ++j)
        if (!b[t[x][j]])
          unia(x, t[x][j]);
      b[x] = 0;
      cout << "TAK" << endl;
    } else {
      cout << "NIE" << endl;
    }
  }
}
