#include <bits/stdc++.h>
using namespace std;
int N, Q;
vector<vector<int> > ad;
vector<int> val, par;
void fun(int c, int p) {
  par[c] = p;
  int i;
  for (i = 0; i < ad[c].size(); i++) {
    if (ad[c][i] != p) fun(ad[c][i], c);
  }
}
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int query(int c, int v) {
  if (c == -1) return c;
  if (gcd(val[c], v) > 1) return c + 1;
  return query(par[c], v);
}
int main() {
  int i, j, k;
  cin >> N >> Q;
  ad.resize(N);
  val.resize(N);
  par.resize(N);
  for (i = 0; i < N; i++) cin >> val[i];
  for (i = 1; i < N; i++) {
    cin >> j >> k;
    ad[j - 1].push_back(k - 1);
    ad[k - 1].push_back(j - 1);
  }
  fun(0, -1);
  while (Q) {
    Q--;
    cin >> k;
    if (k == 2) {
      cin >> j >> k;
      val[j - 1] = k;
    } else {
      cin >> j;
      cout << query(par[j - 1], val[j - 1]) << endl;
    }
  }
  return 0;
}
