#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5,mod=998244353;
vector<pair<int,int>> tree[N];
int sz[N],f[N];
bool vis[N];
int n,q;
void dfs1(int u,int fa){
sz[u]=1;
for(auto it:tree[u]){
int v=it.first;
int w=it.second;
if(v==fa) continue;
dfs1(v,u);
sz[u]+=sz[v];
f[u]=f[u]+f[v]+sz[v]*w%mod;
f[u]=f[u]%mod;
}
}
void dfs2(int u){
vis[u]=1;
for(auto it:tree[u]){
int v=it.first;
int w=it.second;
if(!vis[v]){
f[v]=f[u]+(n-(2*sz[v])%mod)*w;
f[v]=(f[v]+mod)%mod;
dfs2(v);
}
}
}
int main(){
cin>>n>>q;
for(int i=1;i<n;i++){
int u,v,w;
cin>>u>>v>>w;
tree[u].push_back({v,w});
tree[v].push_back({u,w});
}
dfs1(1,0);
dfs2(1);
int now=0;
for(int i=1;i<=n;i++){
now+=f[i];
now=now%mod;
}
int ans=now%mod;
for(int i=1;i<=q;i++){
ans=now%mod;
int u,w;
cin>>u>>w;
ans=ans+2*w*n+2*f[u];
cout<<ans%mod<<endl;
}
return 0;
}