/**
* Solution for "Cay thong" (Pine Tree)
* Algorithm: Heavy-Light Decomposition + Segment Tree Beats + Fenwick Tree
* Complexity: O((N + Q) * log^2 N + V * log V * log Q)
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
// Maximum number of nodes and maximum value of A_i
const int MAXN = 200005;
const int MAXV = 200005;
int N, Q;
int raw_A[MAXN]; // Input values (1-based index)
vector<int> adj[MAXN];
// --- HLD Variables ---
int parent_node[MAXN], depth[MAXN], heavy[MAXN], head[MAXN], pos[MAXN];
int sz[MAXN];
int cur_pos = 0;
int A_hld[MAXN]; // Values reordered by HLD
// --- Global Statistics ---
// BIT stores frequencies of values. Size covers 0 to MAXV.
int bit[MAXV + 10];
long long global_sum = 0; // Sum of all A_v
// Helper to update BIT (1-based indexing internally)
void bit_update(int idx, int val) {
idx++; // Shift 0-based value to 1-based index
for (; idx < MAXV + 10; idx += idx & -idx)
bit[idx] += val;
}
// Helper to query BIT prefix sum
int bit_query(int idx) {
idx++;
int sum = 0;
if (idx >= MAXV + 10) idx = MAXV + 9;
for (; idx > 0; idx -= idx & -idx)
sum += bit[idx];
return sum;
}
// Helper to query BIT range sum
int bit_query_range(int l, int r) {
if (l > r) return 0;
return bit_query(r) - bit_query(l - 1);
}
// --- Segment Tree ---
// tree_max stores the maximum value in the range to optimize modulo updates
int tree_max[4 * MAXN];
void build(int node, int start, int end) {
if (start == end) {
tree_max[node] = A_hld[start];
// Initialize global stats
bit_update(A_hld[start], 1);
global_sum += A_hld[start];
} else {
int mid = (start + end) / 2;
build(2 * node, start, mid);
build(2 * node + 1, mid + 1, end);
tree_max[node] = max(tree_max[2 * node], tree_max[2 * node + 1]);
}
}
// Segment Tree Beats update for Modulo
void update_seg(int node, int start, int end, int l, int r, int w) {
// If range is outside or max value is less than w, no update needed
if (start > end || start > r || end < l || tree_max[node] < w)
return;
// Leaf node: perform update
if (start == end) {
int old_val = tree_max[node];
int new_val = old_val % w;
tree_max[node] = new_val;
// Update global frequency and sum
bit_update(old_val, -1);
bit_update(new_val, 1);
global_sum -= old_val;
global_sum += new_val;
return;
}
int mid = (start + end) / 2;
update_seg(2 * node, start, mid, l, r, w);
update_seg(2 * node + 1, mid + 1, end, l, r, w);
tree_max[node] = max(tree_max[2 * node], tree_max[2 * node + 1]);
}
// --- HLD Functions ---
void dfs_sz(int u, int p) {
sz[u] = 1;
parent_node[u] = p;
depth[u] = depth[p] + 1;
heavy[u] = -1;
int max_sz = 0;
for (int v : adj[u]) {
if (v != p) {
dfs_sz(v, u);
sz[u] += sz[v];
if (sz[v] > max_sz) {
max_sz = sz[v];
heavy[u] = v;
}
}
}
}
void dfs_hld(int u, int h) {
head[u] = h;
pos[u] = ++cur_pos;
A_hld[cur_pos] = raw_A[u]; // Map raw value to HLD position
if (heavy[u] != -1)
dfs_hld(heavy[u], h);
for (int v : adj[u]) {
if (v != parent_node[u] && v != heavy[u])
dfs_hld(v, v);
}
}
void path_update(int u, int v, int w) {
while (head[u] != head[v]) {
if (depth[head[u]] > depth[head[v]]) swap(u, v);
update_seg(1, 1, N, pos[head[v]], pos[v], w);
v = parent_node[head[v]];
}
if (depth[u] > depth[v]) swap(u, v);
update_seg(1, 1, N, pos[u], pos[v], w);
}
int main() {
// Fast I/O
ios_base::sync_with_stdio(false);
cin.tie(NULL);
if (!(cin >> N >> Q)) return 0;
for (int i = 1; i <= N; i++) cin >> raw_A[i];
for (int i = 0; i < N - 1; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
// Preprocessing
dfs_sz(1, 0);
dfs_hld(1, 1);
build(1, 1, N);
// Process Queries
for (int t = 1; t <= Q; t++) {
int x, y, w;
cin >> x >> y >> w;
// 1. Update path
path_update(x, y, w);
// 2. Calculate beauty
// Formula: Sum(val % t) = Sum(val) - t * Sum(floor(val/t))
long long current_beauty = global_sum;
// Iterate k such that floor(val/t) = k
// Range of val: [k*t, (k+1)*t - 1]
for (int k = 1; k * t <= MAXV; k++) {
int l = k * t;
int r = min((k + 1) * t - 1, MAXV);
int count = bit_query_range(l, r);
current_beauty -= (long long)k * t * count;
}
cout << current_beauty << "\n";
}
return 0;
}
LyoqCiAqIFNvbHV0aW9uIGZvciAiQ2F5IHRob25nIiAoUGluZSBUcmVlKQogKiBBbGdvcml0aG06IEhlYXZ5LUxpZ2h0IERlY29tcG9zaXRpb24gKyBTZWdtZW50IFRyZWUgQmVhdHMgKyBGZW53aWNrIFRyZWUKICogQ29tcGxleGl0eTogTygoTiArIFEpICogbG9nXjIgTiArIFYgKiBsb2cgViAqIGxvZyBRKQogKi8KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdGRpbz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBNYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbmQgbWF4aW11bSB2YWx1ZSBvZiBBX2kKY29uc3QgaW50IE1BWE4gPSAyMDAwMDU7CmNvbnN0IGludCBNQVhWID0gMjAwMDA1OwoKaW50IE4sIFE7CmludCByYXdfQVtNQVhOXTsgLy8gSW5wdXQgdmFsdWVzICgxLWJhc2VkIGluZGV4KQp2ZWN0b3I8aW50PiBhZGpbTUFYTl07CgovLyAtLS0gSExEIFZhcmlhYmxlcyAtLS0KaW50IHBhcmVudF9ub2RlW01BWE5dLCBkZXB0aFtNQVhOXSwgaGVhdnlbTUFYTl0sIGhlYWRbTUFYTl0sIHBvc1tNQVhOXTsKaW50IHN6W01BWE5dOwppbnQgY3VyX3BvcyA9IDA7CmludCBBX2hsZFtNQVhOXTsgLy8gVmFsdWVzIHJlb3JkZXJlZCBieSBITEQKCi8vIC0tLSBHbG9iYWwgU3RhdGlzdGljcyAtLS0KLy8gQklUIHN0b3JlcyBmcmVxdWVuY2llcyBvZiB2YWx1ZXMuIFNpemUgY292ZXJzIDAgdG8gTUFYVi4KaW50IGJpdFtNQVhWICsgMTBdOyAKbG9uZyBsb25nIGdsb2JhbF9zdW0gPSAwOyAvLyBTdW0gb2YgYWxsIEFfdgoKLy8gSGVscGVyIHRvIHVwZGF0ZSBCSVQgKDEtYmFzZWQgaW5kZXhpbmcgaW50ZXJuYWxseSkKdm9pZCBiaXRfdXBkYXRlKGludCBpZHgsIGludCB2YWwpIHsKICAgIGlkeCsrOyAvLyBTaGlmdCAwLWJhc2VkIHZhbHVlIHRvIDEtYmFzZWQgaW5kZXgKICAgIGZvciAoOyBpZHggPCBNQVhWICsgMTA7IGlkeCArPSBpZHggJiAtaWR4KQogICAgICAgIGJpdFtpZHhdICs9IHZhbDsKfQoKLy8gSGVscGVyIHRvIHF1ZXJ5IEJJVCBwcmVmaXggc3VtCmludCBiaXRfcXVlcnkoaW50IGlkeCkgewogICAgaWR4Kys7IAogICAgaW50IHN1bSA9IDA7CiAgICBpZiAoaWR4ID49IE1BWFYgKyAxMCkgaWR4ID0gTUFYViArIDk7CiAgICBmb3IgKDsgaWR4ID4gMDsgaWR4IC09IGlkeCAmIC1pZHgpCiAgICAgICAgc3VtICs9IGJpdFtpZHhdOwogICAgcmV0dXJuIHN1bTsKfQoKLy8gSGVscGVyIHRvIHF1ZXJ5IEJJVCByYW5nZSBzdW0KaW50IGJpdF9xdWVyeV9yYW5nZShpbnQgbCwgaW50IHIpIHsKICAgIGlmIChsID4gcikgcmV0dXJuIDA7CiAgICByZXR1cm4gYml0X3F1ZXJ5KHIpIC0gYml0X3F1ZXJ5KGwgLSAxKTsKfQoKLy8gLS0tIFNlZ21lbnQgVHJlZSAtLS0KLy8gdHJlZV9tYXggc3RvcmVzIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSByYW5nZSB0byBvcHRpbWl6ZSBtb2R1bG8gdXBkYXRlcwppbnQgdHJlZV9tYXhbNCAqIE1BWE5dOwoKdm9pZCBidWlsZChpbnQgbm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgdHJlZV9tYXhbbm9kZV0gPSBBX2hsZFtzdGFydF07CiAgICAgICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWwgc3RhdHMKICAgICAgICBiaXRfdXBkYXRlKEFfaGxkW3N0YXJ0XSwgMSk7CiAgICAgICAgZ2xvYmFsX3N1bSArPSBBX2hsZFtzdGFydF07CiAgICB9IGVsc2UgewogICAgICAgIGludCBtaWQgPSAoc3RhcnQgKyBlbmQpIC8gMjsKICAgICAgICBidWlsZCgyICogbm9kZSwgc3RhcnQsIG1pZCk7CiAgICAgICAgYnVpbGQoMiAqIG5vZGUgKyAxLCBtaWQgKyAxLCBlbmQpOwogICAgICAgIHRyZWVfbWF4W25vZGVdID0gbWF4KHRyZWVfbWF4WzIgKiBub2RlXSwgdHJlZV9tYXhbMiAqIG5vZGUgKyAxXSk7CiAgICB9Cn0KCi8vIFNlZ21lbnQgVHJlZSBCZWF0cyB1cGRhdGUgZm9yIE1vZHVsbwp2b2lkIHVwZGF0ZV9zZWcoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGwsIGludCByLCBpbnQgdykgewogICAgLy8gSWYgcmFuZ2UgaXMgb3V0c2lkZSBvciBtYXggdmFsdWUgaXMgbGVzcyB0aGFuIHcsIG5vIHVwZGF0ZSBuZWVkZWQKICAgIGlmIChzdGFydCA+IGVuZCB8fCBzdGFydCA+IHIgfHwgZW5kIDwgbCB8fCB0cmVlX21heFtub2RlXSA8IHcpCiAgICAgICAgcmV0dXJuOwogICAgCiAgICAvLyBMZWFmIG5vZGU6IHBlcmZvcm0gdXBkYXRlCiAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgaW50IG9sZF92YWwgPSB0cmVlX21heFtub2RlXTsKICAgICAgICBpbnQgbmV3X3ZhbCA9IG9sZF92YWwgJSB3OwogICAgICAgIHRyZWVfbWF4W25vZGVdID0gbmV3X3ZhbDsKICAgICAgICAKICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIGZyZXF1ZW5jeSBhbmQgc3VtCiAgICAgICAgYml0X3VwZGF0ZShvbGRfdmFsLCAtMSk7CiAgICAgICAgYml0X3VwZGF0ZShuZXdfdmFsLCAxKTsKICAgICAgICBnbG9iYWxfc3VtIC09IG9sZF92YWw7CiAgICAgICAgZ2xvYmFsX3N1bSArPSBuZXdfdmFsOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICB1cGRhdGVfc2VnKDIgKiBub2RlLCBzdGFydCwgbWlkLCBsLCByLCB3KTsKICAgIHVwZGF0ZV9zZWcoMiAqIG5vZGUgKyAxLCBtaWQgKyAxLCBlbmQsIGwsIHIsIHcpOwogICAgdHJlZV9tYXhbbm9kZV0gPSBtYXgodHJlZV9tYXhbMiAqIG5vZGVdLCB0cmVlX21heFsyICogbm9kZSArIDFdKTsKfQoKLy8gLS0tIEhMRCBGdW5jdGlvbnMgLS0tCnZvaWQgZGZzX3N6KGludCB1LCBpbnQgcCkgewogICAgc3pbdV0gPSAxOwogICAgcGFyZW50X25vZGVbdV0gPSBwOwogICAgZGVwdGhbdV0gPSBkZXB0aFtwXSArIDE7CiAgICBoZWF2eVt1XSA9IC0xOwogICAgaW50IG1heF9zeiA9IDA7CiAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgaWYgKHYgIT0gcCkgewogICAgICAgICAgICBkZnNfc3oodiwgdSk7CiAgICAgICAgICAgIHN6W3VdICs9IHN6W3ZdOwogICAgICAgICAgICBpZiAoc3pbdl0gPiBtYXhfc3opIHsKICAgICAgICAgICAgICAgIG1heF9zeiA9IHN6W3ZdOwogICAgICAgICAgICAgICAgaGVhdnlbdV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGRmc19obGQoaW50IHUsIGludCBoKSB7CiAgICBoZWFkW3VdID0gaDsKICAgIHBvc1t1XSA9ICsrY3VyX3BvczsKICAgIEFfaGxkW2N1cl9wb3NdID0gcmF3X0FbdV07IC8vIE1hcCByYXcgdmFsdWUgdG8gSExEIHBvc2l0aW9uCiAgICBpZiAoaGVhdnlbdV0gIT0gLTEpCiAgICAgICAgZGZzX2hsZChoZWF2eVt1XSwgaCk7CiAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgaWYgKHYgIT0gcGFyZW50X25vZGVbdV0gJiYgdiAhPSBoZWF2eVt1XSkKICAgICAgICAgICAgZGZzX2hsZCh2LCB2KTsKICAgIH0KfQoKdm9pZCBwYXRoX3VwZGF0ZShpbnQgdSwgaW50IHYsIGludCB3KSB7CiAgICB3aGlsZSAoaGVhZFt1XSAhPSBoZWFkW3ZdKSB7CiAgICAgICAgaWYgKGRlcHRoW2hlYWRbdV1dID4gZGVwdGhbaGVhZFt2XV0pIHN3YXAodSwgdik7CiAgICAgICAgdXBkYXRlX3NlZygxLCAxLCBOLCBwb3NbaGVhZFt2XV0sIHBvc1t2XSwgdyk7CiAgICAgICAgdiA9IHBhcmVudF9ub2RlW2hlYWRbdl1dOwogICAgfQogICAgaWYgKGRlcHRoW3VdID4gZGVwdGhbdl0pIHN3YXAodSwgdik7CiAgICB1cGRhdGVfc2VnKDEsIDEsIE4sIHBvc1t1XSwgcG9zW3ZdLCB3KTsKfQoKaW50IG1haW4oKSB7CiAgICAvLyBGYXN0IEkvTwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGlmICghKGNpbiA+PiBOID4+IFEpKSByZXR1cm4gMDsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOOyBpKyspIGNpbiA+PiByYXdfQVtpXTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOIC0gMTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2sodSk7CiAgICB9CgogICAgLy8gUHJlcHJvY2Vzc2luZwogICAgZGZzX3N6KDEsIDApOwogICAgZGZzX2hsZCgxLCAxKTsKICAgIGJ1aWxkKDEsIDEsIE4pOwoKICAgIC8vIFByb2Nlc3MgUXVlcmllcwogICAgZm9yIChpbnQgdCA9IDE7IHQgPD0gUTsgdCsrKSB7CiAgICAgICAgaW50IHgsIHksIHc7CiAgICAgICAgY2luID4+IHggPj4geSA+PiB3OwogICAgICAgIAogICAgICAgIC8vIDEuIFVwZGF0ZSBwYXRoCiAgICAgICAgcGF0aF91cGRhdGUoeCwgeSwgdyk7CiAgICAgICAgCiAgICAgICAgLy8gMi4gQ2FsY3VsYXRlIGJlYXV0eQogICAgICAgIC8vIEZvcm11bGE6IFN1bSh2YWwgJSB0KSA9IFN1bSh2YWwpIC0gdCAqIFN1bShmbG9vcih2YWwvdCkpCiAgICAgICAgbG9uZyBsb25nIGN1cnJlbnRfYmVhdXR5ID0gZ2xvYmFsX3N1bTsKICAgICAgICAKICAgICAgICAvLyBJdGVyYXRlIGsgc3VjaCB0aGF0IGZsb29yKHZhbC90KSA9IGsKICAgICAgICAvLyBSYW5nZSBvZiB2YWw6IFtrKnQsIChrKzEpKnQgLSAxXQogICAgICAgIGZvciAoaW50IGsgPSAxOyBrICogdCA8PSBNQVhWOyBrKyspIHsgCiAgICAgICAgICAgICBpbnQgbCA9IGsgKiB0OwogICAgICAgICAgICAgaW50IHIgPSBtaW4oKGsgKyAxKSAqIHQgLSAxLCBNQVhWKTsKICAgICAgICAgICAgIGludCBjb3VudCA9IGJpdF9xdWVyeV9yYW5nZShsLCByKTsKICAgICAgICAgICAgIGN1cnJlbnRfYmVhdXR5IC09IChsb25nIGxvbmcpayAqIHQgKiBjb3VudDsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBjdXJyZW50X2JlYXV0eSA8PCAiXG4iOwogICAgfQoKICAgIHJldHVybiAwOwp9