#include<iostream>
#include<cstdio>
#include<list>
const int maxn = 200050;
const int mod = 998244353;
using namespace std;
list<pair<int, long long>>edge[maxn];
long long dpu[maxn];
long long dpd[maxn];
long long dnn[maxn];
void dfsd(int now, int las, int n)
{
dnn[now] = 1;
for (auto& next : edge[now])
{
if (next.first == las)continue;
dfsd(next.first, now, n);
dpd[now] += dpd[next.first] + dnn[next.first] * next.second;
dpd[now] %= mod;
dnn[now] += dnn[next.first];
}
}
void dfsu(int now, int las,int n)
{
if (las == -1) dpu[now] = dpd[now];
for (auto& next : edge[now])
{
if (next.first == las)continue;
dpu[next.first] = (((dpu[now] % mod) - ((2 * dnn[next.first] * next.second) % mod) + mod) % mod) + n * next.second;
dpu[next.first] %= mod;
dfsu(next.first, now, n);
}
}
int main()
{
int n, q; cin >> n >> q;
for (int i = 1; i <= n-1; i++)
{
int a, b, v; cin >> a >> b >> v;
edge[a].push_back({ b,v });
edge[b].push_back({ a,v });
}
dfsd(1, -1, n);
dfsu(1, -1, n);
long long sum = 0;
for (int i = 1; i <= n; i++)
{
sum += dpu[i];
sum %= mod;
}
for (int i = 1; i <= q; i++)
{
int k, w; cin >> k >> w;
long long ans = sum + (dpu[k] + static_cast<long long>(n) * w )* 2;
ans %= mod;
cout << ans << endl;
}
}