func_code_string: #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;   }   