// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll long long
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#define fi first
#define se second
#define M 1000000007
#define MAXN 100001
#define GIOIHAN 1000001
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 311
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end()); // dùng để nén sort mảng compare
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n, q ;
ll c[MAXN];
ll chainID[MAXN] ;
ll chainHead[MAXN] ;
ll sz[MAXN] ;
ll high[MAXN] ;
ll par[MAXN] ;
ll st[MAXN] ;
ll fin[MAXN] ;
ll res[MAXN] ;
ll tour[MAXN] ;
ll timedfs = 0, curchain = 1 ;
vector<ll> adj[MAXN];
//**Struct**//
struct query {
ll u, v,color, id ;
bool operator < (const query & other ) const {
return color < other.color ;
}
} que[MAXN];
struct Seg {
ll val[MAXN<<2] ;
void update(ll id,ll l, ll r, ll pos, ll value) {
if(l ==r ) {
val[id]+= value ;
} else {
ll m = l + r >> 1 ;
if(m >= pos )update(id<<1, l, m, pos, value ) ;
else update(id<<1|1, m + 1, r, pos,value ) ;
val[id] = val[id<<1] + val[id<<1|1] ;
}
}
ll get(ll id, ll l, ll r, ll u, ll v ) {
if(v < l || u > r ) return 0 ;
if(u <= l && v >=r ) return val[id] ;
ll m = l + r >> 1;
return get(id<<1, l, m, u, v) + get(id<<1|1, m + 1, r, u, v ) ;
}
} seg;
//**Function**//
struct Data {
ll color, pos ;
bool operator < (const Data & other ) const {
return color < other.color ;
}
};
multiset<Data> ms ;
void dfs(ll u, ll p ) {
sz[u] = 1 ;
for(ll v : adj[u]) {
if(v == p ) continue ;
par[v] = u ;
high[v]= high[u] + 1 ;
dfs(v, u) ;
sz[u] += sz[v] ;
}
}
void hld(ll u, ll p ) {
if(!chainHead[curchain]) {
chainHead[curchain ] = u ;
}
st[u] = ++ timedfs ;
tour[timedfs ] = u ;
chainID[u] = curchain ;
ll nxt = 0 ;
for(ll v : adj[u]) {
if(p == v ) continue ;
if(!nxt || sz[v]> sz[nxt ] ) nxt = v ;
}
if(nxt ) hld(nxt, u) ;
for(ll v : adj[u]) {
if(v != p && v != nxt ) {
curchain ++ ;
hld(v, u ) ;
}
}
fin[u]= timedfs ;
}
void init() {
cin>>n>> q ;
for(ll i = 1 ; i <= n ; i ++ ) {
cin>>c[i];
ms.insert({c[i], i }) ;
}
for(ll i =1 ; i <= n - 1; i ++ ) {
ll x, y ;
cin>>x>> y ;
adj[x].push_back(y) ;
adj[y].push_back(x) ;
}
for(ll i = 1 ; i <= q; i ++ ) {
cin>>que[i].u >> que[i].v >> que[i].color ;
que[i].id = i ;
}
sort(que + 1, que + q + 1) ;
dfs(1, 1 ) ;
hld(1, 1 ) ;
}
ll LCA(ll u, ll v) {
while(chainID[u] != chainID[v]) {
if(chainID[u] > chainID[v]) u = par[chainHead[chainID[u]]];
else v = par[chainHead[chainID[v]]];
}
return high[u] > high[v] ? v : u ;
}
bool query(ll u, ll v ) {
ll lca = LCA(u, v ) ;
while(chainID[u] != chainID[lca]) {
if(seg.get(1,1, n, st[chainHead[chainID[u]]], st[u])) return true ;
u = par[chainHead[chainID[u]]] ;
}
while(chainID[v] != chainID[lca]) {
if(seg.get(1,1, n, st[chainHead[chainID[v]]], st[v])) return true ;
v = par[chainHead[chainID[v]]] ;
}
if(high[u] > high[v]) swap(u, v);
return seg.get(1, 1, n, st[u], st[v]) ;
}
stack<Data > sta ;
void solve() {
ll cur_color = que[1].color ;
for(ll i =1 ; i <= q ; i ++ ) {
if(cur_color != que[i].color ) {
while(!sta.empty()) {
Data t = sta.top() ;
sta.pop() ;
seg.update(1, 1, n,st[t.pos],-1 ) ;
}
}
cur_color = que[i].color ;
while(!ms.empty() ) {
Data t = *ms.begin() ;
if(cur_color > t.color )ms.erase(ms.begin());
else break ;
}
while(!ms.empty()) {
Data t = * ms.begin() ;
if(t.color == cur_color) {
seg.update(1, 1, n, st[t.pos], 1);
sta.push(t) ;
ms.erase(ms.begin()) ;
} else break;
}
res[que[i].id] = query(que[i].u, que[i].v) ;
}
for(ll i = 1 ; i <= q ; i ++ ) cout<<res[i] ;
}
__ROOT__ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
fast;
init();
solve();
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgX19ST09UX18gaW50IG1haW4oKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAxMDAwMDEKI2RlZmluZSBHSU9JSEFOIDEwMDAwMDEKI2RlZmluZSBCTE9DS19TSVpFIDQyNQojZGVmaW5lIE1BWF9OT0RFIDEwMDEwMDEKI2RlZmluZSBMT0cgMTkKI2RlZmluZSBBTFBIQV9TSVpFIDI2CiNkZWZpbmUgQkFTRSAzMTEKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsgLy8gZMO5bmcgxJHhu4MgbsOpbiBzb3J0IG3huqNuZyBjb21wYXJlCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIE1PRFtdID0geyhsbCkxZTkgKyAyMjc3LCAobGwpMWU5ICsgNTI3NywgKGxsKTFlOSArIDgyNzcsIChsbCkxZTkgKyA5Mjc3LCAobGwpIDFlOSArIDcgfTsKY29uc3QgbGwgTk1PRCA9IDE7CmNvbnN0IGludCBkeFtdID0gey0xLCAwLCAxLDB9Owpjb25zdCBpbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07Ci8vKipWYXJpYWJsZSoqLy8KbGwgbiwgcSAgOwpsbCBjW01BWE5dOwpsbCBjaGFpbklEW01BWE5dIDsKbGwgY2hhaW5IZWFkW01BWE5dIDsKbGwgc3pbTUFYTl0gIDsKbGwgaGlnaFtNQVhOXSA7CmxsIHBhcltNQVhOXSA7CmxsIHN0W01BWE5dIDsKbGwgZmluW01BWE5dICA7CmxsIHJlc1tNQVhOXSA7CmxsIHRvdXJbTUFYTl0gOwpsbCB0aW1lZGZzID0gMCwgY3VyY2hhaW4gPSAxIDsKdmVjdG9yPGxsPiBhZGpbTUFYTl07Ci8vKipTdHJ1Y3QqKi8vCnN0cnVjdCBxdWVyeSB7CiAgICBsbCB1LCB2LGNvbG9yLCBpZCAgOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBxdWVyeSAmIG90aGVyICAgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGNvbG9yIDwgb3RoZXIuY29sb3IgIDsKICAgIH0KfSBxdWVbTUFYTl07CgpzdHJ1Y3QgU2VnIHsKICAgIGxsIHZhbFtNQVhOPDwyXSAgOwogICAgdm9pZCB1cGRhdGUobGwgaWQsbGwgbCwgbGwgciwgbGwgcG9zLCBsbCB2YWx1ZSkgewogICAgICAgIGlmKGwgPT1yICkgewogICAgICAgICAgICB2YWxbaWRdKz0gdmFsdWUgOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxsIG0gPSBsICsgciA+PiAxIDsKICAgICAgICAgICAgaWYobSA+PSBwb3MgKXVwZGF0ZShpZDw8MSwgbCwgbSwgcG9zLCB2YWx1ZSApIDsKICAgICAgICAgICAgZWxzZSB1cGRhdGUoaWQ8PDF8MSwgbSArIDEsIHIsIHBvcyx2YWx1ZSAgICAgKSA7CiAgICAgICAgICAgIHZhbFtpZF0gPSB2YWxbaWQ8PDFdICsgdmFsW2lkPDwxfDFdIDsKICAgICAgICB9CiAgICB9CiAgICBsbCBnZXQobGwgaWQsIGxsIGwsIGxsIHIsIGxsIHUsIGxsIHYgKSB7CiAgICAgICAgaWYodiA8IGwgfHwgdSA+IHIgKSByZXR1cm4gMCAgOwogICAgICAgIGlmKHUgPD0gbCAmJiB2ID49ciApIHJldHVybiB2YWxbaWRdIDsKICAgICAgICBsbCBtID0gbCArIHIgPj4gMTsKICAgICAgICByZXR1cm4gZ2V0KGlkPDwxLCBsLCBtLCB1LCB2KSArIGdldChpZDw8MXwxLCBtICsgMSwgciwgdSwgdiAgICApIDsKICAgIH0KfSBzZWc7Ci8vKipGdW5jdGlvbioqLy8KCnN0cnVjdCBEYXRhIHsKICAgIGxsIGNvbG9yLCBwb3MgOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBEYXRhICYgb3RoZXIgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGNvbG9yIDwgb3RoZXIuY29sb3IgOwogICAgfQp9OwptdWx0aXNldDxEYXRhPiBtcyA7CnZvaWQgZGZzKGxsIHUsIGxsIHAgICkgewogICAgc3pbdV0gPSAxIDsKICAgIGZvcihsbCB2IDogYWRqW3VdKSB7CiAgICAgICAgaWYodiA9PSBwICkgY29udGludWUgOwogICAgICAgIHBhclt2XSA9IHUgIDsKICAgICAgICBoaWdoW3ZdPSBoaWdoW3VdICsgMSA7CiAgICAgICAgZGZzKHYsICB1KSA7CiAgICAgICAgc3pbdV0gKz0gc3pbdl0gOwogICAgfQp9CnZvaWQgaGxkKGxsIHUsIGxsIHAgKSB7CiAgICBpZighY2hhaW5IZWFkW2N1cmNoYWluXSkgewogICAgICAgIGNoYWluSGVhZFtjdXJjaGFpbiBdICA9IHUgIDsKICAgIH0KICAgIHN0W3VdID0gKysgdGltZWRmcyA7CiAgICB0b3VyW3RpbWVkZnMgXSAgPSB1IDsKICAgIGNoYWluSURbdV0gPSBjdXJjaGFpbiA7CiAgICBsbCBueHQgPSAwIDsKICAgIGZvcihsbCB2IDogYWRqW3VdKSB7CiAgICAgICAgaWYocCA9PSB2ICkgY29udGludWUgOwogICAgICAgIGlmKCFueHQgfHwgc3pbdl0+IHN6W254dCBdICkgbnh0ID0gdiA7CiAgICB9CiAgICBpZihueHQgKSBobGQobnh0LCB1KSA7CiAgICBmb3IobGwgdiA6IGFkalt1XSkgewogICAgICAgIGlmKHYgIT0gcCAmJiB2ICE9IG54dCApIHsKICAgICAgICAgICAgY3VyY2hhaW4gKysgOwogICAgICAgICAgICBobGQodiwgdSApIDsKICAgICAgICB9CiAgICB9CiAgICBmaW5bdV09IHRpbWVkZnMgOwp9CnZvaWQgaW5pdCgpIHsKICAgIGNpbj4+bj4+IHEgOwogICAgZm9yKGxsIGkgPSAxIDsgaSA8PSBuIDsgaSArKyApIHsKICAgICAgICBjaW4+PmNbaV07CiAgICAgICAgbXMuaW5zZXJ0KHtjW2ldLCBpICB9KSA7CiAgICB9CiAgICBmb3IobGwgaSA9MSA7IGkgPD0gbiAtIDE7ICBpICsrICApIHsKICAgICAgICBsbCB4LCAgeSA7CiAgICAgICAgY2luPj54Pj4geSA7CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh5KSA7CiAgICAgICAgYWRqW3ldLnB1c2hfYmFjayh4KSA7CiAgICB9CiAgICBmb3IobGwgaSA9IDEgOyBpIDw9IHE7ICBpICsrICkgewogICAgICAgIGNpbj4+cXVlW2ldLnUgPj4gcXVlW2ldLnYgPj4gcXVlW2ldLmNvbG9yIDsKICAgICAgICBxdWVbaV0uaWQgPSBpICA7CiAgICB9CiAgICBzb3J0KHF1ZSArIDEsIHF1ZSArIHEgKyAxKSA7CiAgICBkZnMoMSwgMSApIDsKICAgIGhsZCgxLCAxICkgOwp9CmxsIExDQShsbCB1LCBsbCB2KSB7CiAgICB3aGlsZShjaGFpbklEW3VdICE9IGNoYWluSURbdl0pIHsKICAgICAgICBpZihjaGFpbklEW3VdID4gY2hhaW5JRFt2XSkgdSA9IHBhcltjaGFpbkhlYWRbY2hhaW5JRFt1XV1dOwogICAgICAgIGVsc2UgIHYgPSBwYXJbY2hhaW5IZWFkW2NoYWluSURbdl1dXTsKICAgIH0KICAgIHJldHVybiBoaWdoW3VdID4gaGlnaFt2XSA/IHYgOiB1IDsKfQpib29sIHF1ZXJ5KGxsIHUsIGxsIHYgKSB7CiAgICBsbCBsY2EgPSBMQ0EodSwgdiApIDsKICAgIHdoaWxlKGNoYWluSURbdV0gIT0gY2hhaW5JRFtsY2FdKSB7CiAgICAgICAgaWYoc2VnLmdldCgxLDEsIG4sIHN0W2NoYWluSGVhZFtjaGFpbklEW3VdXV0sIHN0W3VdKSkgcmV0dXJuIHRydWUgOwogICAgICAgIHUgPSBwYXJbY2hhaW5IZWFkW2NoYWluSURbdV1dXSA7CiAgICB9CiAgICB3aGlsZShjaGFpbklEW3ZdICE9IGNoYWluSURbbGNhXSkgewogICAgICAgIGlmKHNlZy5nZXQoMSwxLCBuLCBzdFtjaGFpbkhlYWRbY2hhaW5JRFt2XV1dLCBzdFt2XSkpIHJldHVybiB0cnVlIDsKICAgICAgICB2ID0gcGFyW2NoYWluSGVhZFtjaGFpbklEW3ZdXV0gOwogICAgfQogICAgaWYoaGlnaFt1XSA+IGhpZ2hbdl0pIHN3YXAodSwgdik7CiAgICByZXR1cm4gc2VnLmdldCgxLCAxLCBuLCBzdFt1XSwgc3Rbdl0pIDsKfQpzdGFjazxEYXRhID4gc3RhIDsKdm9pZCBzb2x2ZSgpIHsKICAgIGxsIGN1cl9jb2xvciA9ICBxdWVbMV0uY29sb3IgOwogICAgZm9yKGxsIGkgPTEgOyBpIDw9IHEgOyBpICsrICkgewogICAgICAgIGlmKGN1cl9jb2xvciAhPSBxdWVbaV0uY29sb3IgKSB7CiAgICAgICAgICAgIHdoaWxlKCFzdGEuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgRGF0YSB0ID0gc3RhLnRvcCgpIDsKICAgICAgICAgICAgICAgIHN0YS5wb3AoKSA7CiAgICAgICAgICAgICAgICBzZWcudXBkYXRlKDEsIDEsIG4sc3RbdC5wb3NdLC0xICApIDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjdXJfY29sb3IgPSBxdWVbaV0uY29sb3IgOwogICAgICAgIHdoaWxlKCFtcy5lbXB0eSgpICkgewogICAgICAgICAgICBEYXRhIHQgPSAqbXMuYmVnaW4oKSA7CiAgICAgICAgICAgIGlmKGN1cl9jb2xvciA+IHQuY29sb3IgKW1zLmVyYXNlKG1zLmJlZ2luKCkpOwogICAgICAgICAgICBlbHNlIGJyZWFrIDsKICAgICAgICB9CiAgICAgICAgd2hpbGUoIW1zLmVtcHR5KCkpIHsKICAgICAgICAgICAgRGF0YSB0ID0gKiBtcy5iZWdpbigpIDsKICAgICAgICAgICAgaWYodC5jb2xvciA9PSBjdXJfY29sb3IpIHsKICAgICAgICAgICAgICAgIHNlZy51cGRhdGUoMSwgIDEsIG4sIHN0W3QucG9zXSwgMSk7CiAgICAgICAgICAgICAgICBzdGEucHVzaCh0KSA7CiAgICAgICAgICAgICAgICBtcy5lcmFzZShtcy5iZWdpbigpKSA7CiAgICAgICAgICAgIH0gZWxzZSBicmVhazsKICAgICAgICB9CiAgICAgICAgcmVzW3F1ZVtpXS5pZF0gPSBxdWVyeShxdWVbaV0udSwgcXVlW2ldLnYpIDsKICAgIH0KICAgIGZvcihsbCBpID0gMSA7IGkgPD0gcSA7IGkgKysgICkgY291dDw8cmVzW2ldIDsKfQoKX19ST09UX18gewovLyAgICAgZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwovLyAgICAgZnJlb3BlbihOQU1FIi5vdXQiICwgInciLCBzdGRvdXQpIDsKICAgIGZhc3Q7CiAgICBpbml0KCk7CiAgICBzb2x2ZSgpOwp9Cgo=