/*Code by HsonW, 11/2 NH-Hue. Just a newbie <3*/
/*mp<33333*/
#include<bits/stdc++.h>
using namespace std;
using int64=long long;
#define ll long long
const int MOD=1e9+7;
typedef pair<int,int> ii;
const int M = 1e9+7;
int n, q;
vector<vector<int>> c;
vector<int> a;
vector<vector<pair<int, int>>> f;
vector<ll> ans;
ll pw(ll x, ll y = M - 2) {
ll r = 1;
while (y) {
if (y & 1) r = r * x % M;
x = x * x % M;
y >>= 1;
}
return r;
}
struct D {
unordered_map<int, int>* m;
ll v;
};
D dfs(int u) {
D d;
d.m = new unordered_map<int, int>();
d.v = 1;
for (auto& p : f[u]) {
(*d.m)[p.first] = p.second;
d.v = d.v * (p.second + 1) % M;
}
for (int v : c[u]) {
D t = dfs(v);
if (t.m->size() > d.m->size()) {
swap(d.m, t.m);
swap(d.v, t.v);
}
for (auto& kv : *t.m) {
int p = kv.first, e = kv.second;
int o = (*d.m)[p];
d.v = d.v * pw(o + 1) % M;
int ne = o + e;
(*d.m)[p] = ne;
d.v = d.v * (ne + 1) % M;
}
delete t.m;
}
ans[u] = d.v;
return d;
}
int main() {
#define name "TREE"
ios::sync_with_stdio(0);
cin.tie(NULL);
if (fopen(name ".inp", "r")) {
freopen(name ".inp", "r", stdin);
freopen(name ".out", "w", stdout);
}
cin >> n >> q;
a.assign(n + 1, 0);
for (int i = 1; i <= n; i++) cin >> a[i];
vector<vector<int>> g(n + 1);
for (int i = 0, u, v; i < n - 1; i++) {
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
c.assign(n + 1, {});
vector<int> s = {1}, p(n + 1, 0);
for (int i = 0; i < (int)s.size(); i++) {
int u = s[i];
for (int v : g[u]) if (v != p[u]) {
p[v] = u;
c[u].push_back(v);
s.push_back(v);
}
}
int A = *max_element(a.begin() + 1, a.end());
vector<int> sp(A + 1);
for (int i = 2; i <= A; i++) if (!sp[i]) for (int j = i; j <= A; j += i) if (!sp[j]) sp[j] = i;
f.assign(n + 1, {});
for (int i = 1; i <= n; i++) {
int x = a[i];
while (x > 1) {
int p = sp[x], cnt = 0;
while (x % p == 0) x /= p, cnt++;
f[i].emplace_back(p, cnt);
}
}
ans.assign(n + 1, 0);
dfs(1);
while (q--) {
int u;
cin >> u;
cout << ans[u] << (q ? ' ' : '\n');
}
return 0;
}
LypDb2RlIGJ5IEhzb25XLCAxMS8yIE5ILUh1ZS4gSnVzdCBhIG5ld2JpZSA8MyovCi8qbXA8MzMzMzMqLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBpbnQ2ND1sb25nIGxvbmc7CiNkZWZpbmUgbGwgbG9uZyBsb25nCmNvbnN0IGludCBNT0Q9MWU5Kzc7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBpaTsKY29uc3QgaW50IE0gPSAxZTkrNzsKaW50IG4sIHE7CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gYzsKdmVjdG9yPGludD4gYTsKdmVjdG9yPHZlY3RvcjxwYWlyPGludCwgaW50Pj4+IGY7CnZlY3RvcjxsbD4gYW5zOwpsbCBwdyhsbCB4LCBsbCB5ID0gTSAtIDIpIHsKICAgIGxsIHIgPSAxOwogICAgd2hpbGUgKHkpIHsKICAgICAgICBpZiAoeSAmIDEpIHIgPSByICogeCAlIE07CiAgICAgICAgeCA9IHggKiB4ICUgTTsKICAgICAgICB5ID4+PSAxOwogICAgfQogICAgcmV0dXJuIHI7Cn0Kc3RydWN0IEQgewogICAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4qIG07CiAgICBsbCB2Owp9OwpEIGRmcyhpbnQgdSkgewogICAgRCBkOwogICAgZC5tID0gbmV3IHVub3JkZXJlZF9tYXA8aW50LCBpbnQ+KCk7CiAgICBkLnYgPSAxOwogICAgZm9yIChhdXRvJiBwIDogZlt1XSkgewogICAgICAgICgqZC5tKVtwLmZpcnN0XSA9IHAuc2Vjb25kOwogICAgICAgIGQudiA9IGQudiAqIChwLnNlY29uZCArIDEpICUgTTsKICAgIH0KICAgIGZvciAoaW50IHYgOiBjW3VdKSB7CiAgICAgICAgRCB0ID0gZGZzKHYpOwogICAgICAgIGlmICh0Lm0tPnNpemUoKSA+IGQubS0+c2l6ZSgpKSB7CiAgICAgICAgICAgIHN3YXAoZC5tLCB0Lm0pOwogICAgICAgICAgICBzd2FwKGQudiwgdC52KTsKICAgICAgICB9CiAgICAgICAgZm9yIChhdXRvJiBrdiA6ICp0Lm0pIHsKICAgICAgICAgICAgaW50IHAgPSBrdi5maXJzdCwgZSA9IGt2LnNlY29uZDsKICAgICAgICAgICAgaW50IG8gPSAoKmQubSlbcF07CiAgICAgICAgICAgIGQudiA9IGQudiAqIHB3KG8gKyAxKSAlIE07CiAgICAgICAgICAgIGludCBuZSA9IG8gKyBlOwogICAgICAgICAgICAoKmQubSlbcF0gPSBuZTsKICAgICAgICAgICAgZC52ID0gZC52ICogKG5lICsgMSkgJSBNOwogICAgICAgIH0KICAgICAgICBkZWxldGUgdC5tOwogICAgfQogICAgYW5zW3VdID0gZC52OwogICAgcmV0dXJuIGQ7Cn0KaW50IG1haW4oKSB7CiAgICAjZGVmaW5lIG5hbWUgIlRSRUUiCiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBpZiAoZm9wZW4obmFtZSAiLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKG5hbWUgIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKG5hbWUgIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBjaW4gPj4gbiA+PiBxOwogICAgYS5hc3NpZ24obiArIDEsIDApOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZyhuICsgMSk7CiAgICBmb3IgKGludCBpID0gMCwgdSwgdjsgaSA8IG4gLSAxOyBpKyspIHsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgYy5hc3NpZ24obiArIDEsIHt9KTsKICAgIHZlY3RvcjxpbnQ+IHMgPSB7MX0sIHAobiArIDEsIDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICBpbnQgdSA9IHNbaV07CiAgICAgICAgZm9yIChpbnQgdiA6IGdbdV0pIGlmICh2ICE9IHBbdV0pIHsKICAgICAgICAgICAgcFt2XSA9IHU7CiAgICAgICAgICAgIGNbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgICAgICBzLnB1c2hfYmFjayh2KTsKICAgICAgICB9CiAgICB9CiAgICBpbnQgQSA9ICptYXhfZWxlbWVudChhLmJlZ2luKCkgKyAxLCBhLmVuZCgpKTsKICAgIHZlY3RvcjxpbnQ+IHNwKEEgKyAxKTsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IEE7IGkrKykgaWYgKCFzcFtpXSkgZm9yIChpbnQgaiA9IGk7IGogPD0gQTsgaiArPSBpKSBpZiAoIXNwW2pdKSBzcFtqXSA9IGk7CiAgICBmLmFzc2lnbihuICsgMSwge30pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaW50IHggPSBhW2ldOwogICAgICAgIHdoaWxlICh4ID4gMSkgewogICAgICAgICAgICBpbnQgcCA9IHNwW3hdLCBjbnQgPSAwOwogICAgICAgICAgICB3aGlsZSAoeCAlIHAgPT0gMCkgeCAvPSBwLCBjbnQrKzsKICAgICAgICAgICAgZltpXS5lbXBsYWNlX2JhY2socCwgY250KTsKICAgICAgICB9CiAgICB9CiAgICBhbnMuYXNzaWduKG4gKyAxLCAwKTsKICAgIGRmcygxKTsKICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBpbnQgdTsgCiAgICAgICAgY2luID4+IHU7CiAgICAgICAgY291dCA8PCBhbnNbdV0gPDwgKHEgPyAnICcgOiAnXG4nKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==