#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vi vector<int>
#define fi first
#define se second
#define pb push_back
#define ii pair<int , int>
#define pq priority_queue
#define iii pair<int , pair<int , int>>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define fod(i,r,l) for(int i=r;i>=l;i--)
#define fill(f,x) memset(f,x,sizeof(f))
#define NAME "file"
const int N = 2e5 + 5, mod = 1e9 + 7;
int s[N] , hev[N] , d[N] , head[N] , pos[N] , cnt = 0 , par[N] , node[N];
int st[4*N] , a[N] , bit[N] , sum = 0;
int n , q;
vector <int> g[N];
void dfs(int u , int pa)
{
s[u] = 1;
for (auto v : g[u])
if (v != pa)
{
d[v] = d[u] + 1;
par[v] = u;
dfs(v , u);
s[u] += s[v];
if (s[v] > s[hev[u]])
hev[u] = v;
}
}
void hld(int u , int pa , int h)
{
head[u] = h;
pos[u] = ++cnt;
node[cnt] = u;
if (hev[u] != 0)
hld(hev[u] , u , h);
for (auto v : g[u])
if (v != pa && v != hev[u])
hld(v , u , v);
}
void upd_st(int i, int val, int id = 1, int l = 1, int r = n)
{
if (l > i || r < i)
return;
if (l == r)
{
st[id] = val;
return;
}
int mid = (l + r) >> 1;
upd_st(i, val, id * 2, l, mid);
upd_st(i, val, id * 2 + 1, mid + 1, r);
st[id] = max(st[2 * id] , st[2 * id + 1]);
}
int get_st(int u, int v, int id = 1, int l = 1, int r = n)
{
if (r < u || v < l) return 0;
if (u <= l && r <= v) return st[id];
int mid = (l + r) >> 1;
return max(get_st(u, v, id * 2, l, mid) , get_st(u, v, id * 2 + 1, mid + 1, r));
}
void upd_cnt(int x, int v)
{
x++;
for (; x <= 200001; x += x & -x) bit[x] += v;
}
int get_cnt(int x)
{
x++;
int res = 0;
for (; x >= 1; x &= x - 1) res += bit[x];
return res;
}
void walk(int u, int v, int w, int id = 1, int l = 1, int r = n)
{
if (st[id] < w || r < u || v < l) return;
if (l == r)
{
int i = node[l]; //i la dinh cos pos[i] == l
upd_cnt(a[i] , -1);
sum -= a[i];
a[i] %= w;
st[id] = a[i];
sum += a[i];
upd_cnt(a[i] , 1);
}
else
{
int mid = (l + r) / 2;
walk(u, v, w, id * 2, l, mid);
walk(u, v, w, id * 2 + 1, mid + 1, r);
st[id] = max(st[id * 2] , st[id * 2 + 1]);
}
}
void lca(int u , int v , int w)
{
while (head[u] != head[v])
{
if (d[head[u]] < d[head[v]])
swap(u , v);
walk(pos[head[u]] , pos[u] , w);
u = par[head[u]];
}
if (d[u] < d[v])
swap(u , v);
walk(pos[v] , pos[u] , w);
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
//freopen(NAME".INP" , "r" , stdin);
//freopen(NAME".OUT" , "w" , stdout);
cin >> n >> q;
fo(i, 1, n) cin >> a[i];
fo(i, 1, n - 1)
{
int u , v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
d[1] = 1;
dfs(1 , 0);
hld(1 , 0 , 1);
fo(i, 1, n)
{
upd_st(pos[i] , a[i]);
upd_cnt(a[i] , 1);
sum += a[i];
}
fo(t, 1, q)
{
int x , y , w;
cin >> x >> y >> w;
lca(x , y , w);
int res = sum , db = 0;
fo(k, 1, 200000 / t)
{
res -= (get_cnt(min((k + 1) * t - 1 , 200000LL)) - get_cnt(k * t - 1)) * k * t;
}
cout << res << '\n';
}
}
// haronnee_
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBpaSBwYWlyPGludCAsIGludD4KI2RlZmluZSBwcSBwcmlvcml0eV9xdWV1ZQojZGVmaW5lIGlpaSBwYWlyPGludCAsIHBhaXI8aW50ICwgaW50Pj4KI2RlZmluZSBmbyhpLGwscikgZm9yKGludCBpPWw7aTw9cjtpKyspCiNkZWZpbmUgZm9kKGkscixsKSBmb3IoaW50IGk9cjtpPj1sO2ktLSkKI2RlZmluZSBmaWxsKGYseCkgbWVtc2V0KGYseCxzaXplb2YoZikpCiNkZWZpbmUgTkFNRSAiZmlsZSIKCmNvbnN0IGludCBOID0gMmU1ICsgNSwgbW9kID0gMWU5ICsgNzsKaW50IHNbTl0gLCBoZXZbTl0gLCBkW05dICwgaGVhZFtOXSAsIHBvc1tOXSAsIGNudCA9IDAgLCBwYXJbTl0gLCBub2RlW05dOwppbnQgc3RbNCpOXSAsIGFbTl0gLCBiaXRbTl0gLCBzdW0gPSAwOwppbnQgbiAsIHE7IAp2ZWN0b3IgPGludD4gZ1tOXTsKCnZvaWQgZGZzKGludCB1ICwgaW50IHBhKQp7CiAgICBzW3VdID0gMTsKICAgIGZvciAoYXV0byB2IDogZ1t1XSkKICAgIGlmICh2ICE9IHBhKQogICAgewogICAgICAgIGRbdl0gPSBkW3VdICsgMTsKICAgICAgICBwYXJbdl0gPSB1OwoKICAgICAgICBkZnModiAsIHUpOwoKICAgICAgICBzW3VdICs9IHNbdl07CiAgICAgICAgaWYgKHNbdl0gPiBzW2hldlt1XV0pCiAgICAgICAgICAgIGhldlt1XSA9IHY7CiAgICB9Cn0KCnZvaWQgaGxkKGludCB1ICwgaW50IHBhICwgaW50IGgpCnsKICAgIGhlYWRbdV0gPSBoOwogICAgcG9zW3VdID0gKytjbnQ7CiAgICBub2RlW2NudF0gPSB1OwoKICAgIGlmIChoZXZbdV0gIT0gMCkKICAgICAgICBobGQoaGV2W3VdICwgdSAsIGgpOwoKICAgIGZvciAoYXV0byB2IDogZ1t1XSkKICAgIGlmICh2ICE9IHBhICYmIHYgIT0gaGV2W3VdKQogICAgICAgIGhsZCh2ICwgdSAsIHYpOwp9Cgp2b2lkIHVwZF9zdChpbnQgaSwgaW50IHZhbCwgaW50IGlkID0gMSwgaW50IGwgPSAxLCBpbnQgciA9IG4pIAp7CiAgICBpZiAobCA+IGkgfHwgciA8IGkpCiAgICAgICAgcmV0dXJuOwogCiAgICBpZiAobCA9PSByKSAKICAgIHsKICAgICAgICBzdFtpZF0gPSB2YWw7CiAgICAgICAgcmV0dXJuOwogICAgfQogCiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKICAgIHVwZF9zdChpLCB2YWwsIGlkICogMiwgbCwgbWlkKTsKICAgIHVwZF9zdChpLCB2YWwsIGlkICogMiArIDEsIG1pZCArIDEsIHIpOwogICAgc3RbaWRdID0gbWF4KHN0WzIgKiBpZF0gLCBzdFsyICogaWQgKyAxXSk7Cn0KIAppbnQgZ2V0X3N0KGludCB1LCBpbnQgdiwgaW50IGlkID0gMSwgaW50IGwgPSAxLCBpbnQgciA9IG4pCnsKICAgIGlmIChyIDwgdSB8fCB2IDwgbCkgcmV0dXJuIDA7CiAgICBpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHN0W2lkXTsKIAogICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgIHJldHVybiBtYXgoZ2V0X3N0KHUsIHYsIGlkICogMiwgbCwgbWlkKSAsIGdldF9zdCh1LCB2LCBpZCAqIDIgKyAxLCBtaWQgKyAxLCByKSk7Cn0KCnZvaWQgdXBkX2NudChpbnQgeCwgaW50IHYpIAp7CiAgICB4Kys7Cglmb3IgKDsgeCA8PSAyMDAwMDE7IHggKz0geCAmIC14KSBiaXRbeF0gKz0gdjsKfQppbnQgZ2V0X2NudChpbnQgeCkgCnsKICAgIHgrKzsKCWludCByZXMgPSAwOwoJZm9yICg7IHggPj0gMTsgeCAmPSB4IC0gMSkgcmVzICs9IGJpdFt4XTsKCXJldHVybiByZXM7Cn0KCnZvaWQgd2FsayhpbnQgdSwgaW50IHYsIGludCB3LCBpbnQgaWQgPSAxLCBpbnQgbCA9IDEsIGludCByID0gbikKewogICAgaWYgKHN0W2lkXSA8IHcgfHwgciA8IHUgfHwgdiA8IGwpIHJldHVybjsKICAgIAogICAgaWYgKGwgPT0gcikKICAgIHsKICAgICAgICBpbnQgaSA9IG5vZGVbbF07IC8vaSBsYSBkaW5oIGNvcyBwb3NbaV0gPT0gbAogICAgICAgIHVwZF9jbnQoYVtpXSAsIC0xKTsKICAgICAgICBzdW0gLT0gYVtpXTsKCiAgICAgICAgYVtpXSAlPSB3OwogICAgICAgIHN0W2lkXSA9IGFbaV07CgogICAgICAgIHN1bSArPSBhW2ldOwogICAgICAgIHVwZF9jbnQoYVtpXSAsIDEpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgICAgICB3YWxrKHUsIHYsIHcsIGlkICogMiwgbCwgbWlkKTsKICAgICAgICB3YWxrKHUsIHYsIHcsIGlkICogMiArIDEsIG1pZCArIDEsIHIpOwoKICAgICAgICBzdFtpZF0gPSBtYXgoc3RbaWQgKiAyXSAsIHN0W2lkICogMiArIDFdKTsKICAgIH0KfQoKdm9pZCBsY2EoaW50IHUgLCBpbnQgdiAsIGludCB3KQp7CiAgICB3aGlsZSAoaGVhZFt1XSAhPSBoZWFkW3ZdKQogICAgewogICAgICAgIGlmIChkW2hlYWRbdV1dIDwgZFtoZWFkW3ZdXSkKICAgICAgICAgICAgc3dhcCh1ICwgdik7CgogICAgICAgIHdhbGsocG9zW2hlYWRbdV1dICwgcG9zW3VdICwgdyk7CiAgICAgICAgdSA9IHBhcltoZWFkW3VdXTsKICAgIH0KICAgIGlmIChkW3VdIDwgZFt2XSkKICAgICAgICBzd2FwKHUgLCB2KTsKICAgIHdhbGsocG9zW3ZdICwgcG9zW3VdICwgdyk7Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7ICBjb3V0LnRpZSgwKTsKICAgIC8vZnJlb3BlbihOQU1FIi5JTlAiICwgInIiICwgc3RkaW4pOwogICAgLy9mcmVvcGVuKE5BTUUiLk9VVCIgLCAidyIgLCBzdGRvdXQpOwoKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmbyhpLCAxLCBuKSBjaW4gPj4gYVtpXTsKICAgIGZvKGksIDEsIG4gLSAxKQogICAgewogICAgICAgIGludCB1ICwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIGRbMV0gPSAxOwogICAgZGZzKDEgLCAwKTsKICAgIGhsZCgxICwgMCAsIDEpOwoKICAgIGZvKGksIDEsIG4pCiAgICB7CiAgICAgICAgdXBkX3N0KHBvc1tpXSAsIGFbaV0pOwogICAgICAgIHVwZF9jbnQoYVtpXSAsIDEpOwogICAgICAgIHN1bSArPSBhW2ldOwogICAgfQoKICAgIGZvKHQsIDEsIHEpCiAgICB7CiAgICAgICAgaW50IHggLCB5ICwgdzsKICAgICAgICBjaW4gPj4geCA+PiB5ID4+IHc7CiAgICAgICAgbGNhKHggLCB5ICwgdyk7CgogICAgICAgIGludCByZXMgPSBzdW0gLCBkYiA9IDA7CiAgICAgICAgZm8oaywgMSwgMjAwMDAwIC8gdCkKICAgICAgICB7CiAgICAgICAgICAgIHJlcyAtPSAoZ2V0X2NudChtaW4oKGsgKyAxKSAqIHQgLSAxICwgMjAwMDAwTEwpKSAtIGdldF9jbnQoayAqIHQgLSAxKSkgKiBrICogdDsKICAgICAgICB9CiAgICAgICAgY291dCA8PCByZXMgPDwgJ1xuJzsKICAgIH0KfQovLyBoYXJvbm5lZV8=