#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 3;
int head[N], heavy[N], depth[N], n, m, a[N], par[N], sz[N], t, pos[N];
vector<int> g[N], mang[N];
void DFS(int u){
sz[u] = 1;
int maxx = 0;
for(auto x: g[u]){
if(x == par[u]) continue;
depth[x] = depth[u] + 1;
par[x] = u;
DFS(x);
sz[u] += sz[x];
if(sz[x] > maxx){
maxx= sz[x];
heavy[u] = x;
}
}
return;
}
void buildhld(int u, int h){
head[u] = h;
pos[u] = ++t;
if(heavy[u]){
buildhld(heavy[u], h);
}
for(auto x: g[u]){
if(x == par[u] || x == heavy[u]) continue;
buildhld(x, x);
}
return;
}
bool solve(int u, int v, int val){
int res = 0;
while(head[u] != head[v]){
if(depth[head[u]] > depth[head[v]]) swap(u, v);
res += upper_bound(mang[val].begin(), mang[val].end(), pos[v])
- lower_bound(mang[val].begin(), mang[val].end(), pos[head[v]]);
v = par[head[v]];
}
if(depth[u] > depth[v]) swap(u, v);
res += upper_bound(mang[val].begin(), mang[val].end(), pos[v])
- lower_bound(mang[val].begin(), mang[val].end(), pos[u]);
return res > 0;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int u, v, i, w;
cin >> n >> m;
for(i = 1; i <= n; i++){
cin >> a[i];
}
for(i = 1; i < n; i++){
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
DFS(1);
buildhld(1, 1);
for(i = 1; i <= n; i++){
mang[a[i]].push_back(pos[i]);
}
for(i = 1; i <= n; i++) sort(mang[i].begin(), mang[i].end());
for(i = 1; i <= m; i++){
cin >> u >> v >> w;
cout << solve(u, v, w);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDFlNSArIDM7CmludCBoZWFkW05dLCBoZWF2eVtOXSwgZGVwdGhbTl0sIG4sIG0sIGFbTl0sIHBhcltOXSwgc3pbTl0sIHQsIHBvc1tOXTsKdmVjdG9yPGludD4gZ1tOXSwgbWFuZ1tOXTsKdm9pZCBERlMoaW50IHUpewogICAgc3pbdV0gPSAxOwogICAgaW50IG1heHggPSAwOwogICAgZm9yKGF1dG8geDogZ1t1XSl7CiAgICAgICAgaWYoeCA9PSBwYXJbdV0pIGNvbnRpbnVlOwogICAgICAgIGRlcHRoW3hdID0gZGVwdGhbdV0gKyAxOwogICAgICAgIHBhclt4XSA9IHU7CiAgICAgICAgREZTKHgpOwogICAgICAgIHN6W3VdICs9IHN6W3hdOwogICAgICAgIGlmKHN6W3hdID4gbWF4eCl7CiAgICAgICAgICAgIG1heHg9IHN6W3hdOwogICAgICAgICAgICBoZWF2eVt1XSA9IHg7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CnZvaWQgYnVpbGRobGQoaW50IHUsIGludCBoKXsKICAgIGhlYWRbdV0gPSBoOwogICAgcG9zW3VdID0gKyt0OwogICAgaWYoaGVhdnlbdV0pewogICAgICAgIGJ1aWxkaGxkKGhlYXZ5W3VdLCBoKTsKICAgIH0KICAgIGZvcihhdXRvIHg6IGdbdV0pewogICAgICAgIGlmKHggPT0gcGFyW3VdIHx8IHggPT0gaGVhdnlbdV0pIGNvbnRpbnVlOwogICAgICAgIGJ1aWxkaGxkKHgsIHgpOwogICAgfQogICAgcmV0dXJuOwp9CmJvb2wgc29sdmUoaW50IHUsIGludCB2LCBpbnQgdmFsKXsKICAgIGludCByZXMgPSAwOwogICAgd2hpbGUoaGVhZFt1XSAhPSBoZWFkW3ZdKXsKICAgICAgICBpZihkZXB0aFtoZWFkW3VdXSA+IGRlcHRoW2hlYWRbdl1dKSBzd2FwKHUsIHYpOwogICAgICAgIHJlcyArPSB1cHBlcl9ib3VuZChtYW5nW3ZhbF0uYmVnaW4oKSwgbWFuZ1t2YWxdLmVuZCgpLCBwb3Nbdl0pCiAgICAgICAgLSBsb3dlcl9ib3VuZChtYW5nW3ZhbF0uYmVnaW4oKSwgbWFuZ1t2YWxdLmVuZCgpLCBwb3NbaGVhZFt2XV0pOwogICAgICAgIHYgPSBwYXJbaGVhZFt2XV07CiAgICB9CiAgICBpZihkZXB0aFt1XSA+IGRlcHRoW3ZdKSBzd2FwKHUsIHYpOwogICAgcmVzICs9IHVwcGVyX2JvdW5kKG1hbmdbdmFsXS5iZWdpbigpLCBtYW5nW3ZhbF0uZW5kKCksIHBvc1t2XSkKICAgICAgICAtIGxvd2VyX2JvdW5kKG1hbmdbdmFsXS5iZWdpbigpLCBtYW5nW3ZhbF0uZW5kKCksIHBvc1t1XSk7CiAgICByZXR1cm4gcmVzID4gMDsKfQppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQudGllKE5VTEwpOwogICAgaW50IHUsIHYsIGksIHc7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yKGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CiAgICBmb3IoaSA9IDE7IGkgPCBuOyBpKyspewogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgZ1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgZ1t2XS5wdXNoX2JhY2sodSk7CiAgICB9CiAgICBERlMoMSk7CiAgICBidWlsZGhsZCgxLCAxKTsKICAgIGZvcihpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIG1hbmdbYVtpXV0ucHVzaF9iYWNrKHBvc1tpXSk7CiAgICB9CiAgICBmb3IoaSA9IDE7IGkgPD0gbjsgaSsrKSBzb3J0KG1hbmdbaV0uYmVnaW4oKSwgbWFuZ1tpXS5lbmQoKSk7CiAgICBmb3IoaSA9IDE7IGkgPD0gbTsgaSsrKXsKICAgICAgICBjaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAgICAgY291dCA8PCBzb2x2ZSh1LCB2LCB3KTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==