#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+5;
struct Edge{
int v,next,w;
}e[N<<1];
int head[N],idx;
void add(int u,int v,int w){
e[++idx]={v,head[u],w};
head[u]=idx;
}
int n,m,root,dis[N],t[N],sl[N],pm[N],px[N],pn,qz[N],dep[N],f[N][20],g[N][20],cf[N],lst;
bool cmp(int x,int y){
return sl[x]>sl[y];
}
void fr(int u,int fa){
if(dis[u]>=dis[root]) root=u;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v,w=e[i].w;
if(v==fa) continue;
dis[v]=dis[u]+w;
fr(v,u);
}
}
void dfs(int u,int fa){
for(int i=head[u];i;i=e[i].next){
int v=e[i].v,w=e[i].w;
if(v==fa) continue;
cf[v]=cf[u]+w;
dfs(v,u);
if(dis[v]+w>dis[u])
dis[u]=dis[v]+w,t[u]=t[v];
}
for(int i=head[u];i;i=e[i].next){
int v=e[i].v,w=e[i].w;
if(v==fa) continue;
if(t[v]!=t[u])
px[++pn]=t[v],sl[t[v]]=dis[v]+w;
}
if(!t[u]) t[u]=u;
}
void dfs_(int u,int fa){
dep[u]=dep[fa]+1;
f[u][0]=fa,g[u][0]=pm[t[u]];
for(int i=1;1<<i<dep[u];i++)
f[u][i]=f[f[u][i-1]][i-1],g[u][i]=min(g[u][i-1],g[f[u][i-1]][i-1]);
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(v==fa) continue;
dfs_(v,u);
}
}
int bz(int u,int k){
for(int i=19;i>=0;i--)
if(f[u][i]&&g[u][i]>k)
u=f[u][i];
return u;
}
signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<n;i++){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w),add(v,u,w);
}
fr(1,0);
memset(dis,0,sizeof(dis));
dfs(root,0);
px[++pn]=t[root],sl[t[root]]=dis[root];
sort(px+1,px+pn+1,cmp);
for(int i=1;i<=pn;i++)
pm[px[i]]=i,qz[i]=qz[i-1]+sl[px[i]];
dfs_(root,0);
while(m--){
int x,y;
scanf("%lld%lld",&x,&y);
x=(x+lst-1)%n+1,y=(y+lst-1)%n+1;
if(pm[t[x]]<2*y) lst=qz[min(pn,2*y-1)];
else{
int d1=bz(x,2*y-2),d2=bz(x,2*y-1);
lst=max(qz[2*y-2]+cf[t[x]]-cf[d1],qz[2*y-1]-dis[d2]+cf[t[x]]-cf[d2]);
}
printf("%lld\n",lst);
}
return 0;
}