#include<bits/stdc++.h>
using namespace std;
int c[200010];
int u[200010],v[200010],w[200010];
long long dij[2010];
long long mind[2010][2010];
int x[200010],y[200010];
long long maxv[2010][2010];
int main(){
//freopen("speaker2.in","r",stdin);
//freopen("speaker2.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>c[i];
}
for(int i=1;i<n;i++){
cin>>u[i]>>v[i]>>w[i];
}
for(int i=1;i<=q;i++){
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dij[j]=0x3f3f3f3f;
}
dij[i]=0;
for(int j=1;j<n;j++){
dij[v[j]]=min(dij[v[j]],dij[u[j]]+w[j]);
dij[u[j]]=min(dij[u[j]],dij[v[j]]+w[j]);
}
for(int j=1;j<=n;j++){
if(i==j) mind[i][j]=0;
else mind[i][j]=dij[j];
//cout<<mind[i][j]<<" ";
}
//cout<<'\n';
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
mind[i][j]=min(mind[i][j],mind[j][i]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
maxv[i][j]=c[j]-mind[i][j];
//cout<<maxv[i][j]<<" ";
}
//cout<<;
}
long long ans=0;
for(int i=1;i<=q;i++){
long long maxx=-0x3f3f3f3f;
for(int j=1;j<=n;j++){
maxx=max(maxv[x[i]][j]-mind[j][y[i]]+c[y[i]]+c[x[i]],maxx);
//cout<<maxx<<" ";
}
//cout<<'\n';
cout<<maxx<<'\n';
}
//cout<<ans;
return 0;
}
纯暴力,不知道为什么样例#2过不去
求调 悬2关