#include <bits/stdc++.h>
using namespace std;
int n,q;
long long sum;
vector<pair<int,int>>e[200005];
vector<vector<int>>c;
vector<pair<int,int>>xl[200005];
int color[200005],num[200005];//如果连边数量>=sqrt(n),就把它扔进来
void init(){
for(int i=0;i<200005;i++){
color[i]=num[i]=0;
e[i].clear();
xl[i].clear();
}
return ;
}
void solve(){
init();
sum=0;
cin>>n>>q;
for(int i=1;i<n+1;i++) cin>>color[i];
for(int i=1;i<n;i++){
int u,v,w;
cin>>u>>v>>w;
e[u].push_back({v,w});
e[v].push_back({u,w});
}
int cnt=1;
vector<int>v;
for(int i=0;i<n+1;i++) v.push_back(0);
c.push_back(v);
for(int i=1;i<n+1;i++){
if(e[i].size()>=sqrt(n)){
c.push_back(v);
for(int j=0;j<e[i].size();j++){
int u=e[i][j].first,w=e[i][j].second;
c[i][color[u]]+=w;
if(color[u]!=color[i]) sum+=w;
xl[u].push_back({cnt,w});
}
num[i]=cnt++;
}
else{
for(int j=0;j<e[i].size();j++){
if(color[i]!=color[e[i][j].first]) sum+=e[i][j].second;
}
}
//sum要除以2
}
sum/=2;
while(q--){
int v,x;
cin>>v>>x;
if(e[v].size()<sqrt(n)){
//O(sqrt(n))
for(int i=0;i<e[v].size();i++){
int u=e[v][i].first,w=e[v][i].second;
if(color[u]==color[v]) sum+=w;
if(color[u]==x) sum-=w;
if(num[u]){
int y=num[u];
c[y][color[v]]-=w;
c[y][x]+=w;
}
}
}
else{
sum+=c[v][color[v]];
sum-=c[v][x];
for(int i=0;i<xl[v].size();i++){
int y=xl[v][i].first,w=xl[v][i].second;
c[y][color[v]]-=w;
c[y][x]+=w;
}
}
color[v]=x;
cout<<sum<<endl;
}
}
int main(){
int t=0;
cin>>t;
while(t--){
solve();
}
return 0;
}