#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<bitset>
#include<math.h>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int N=100100;
const int MAX=151;
const int mod=100000000;
const int MOD1=1000000007;
const int MOD2=1000000009;
const double EPS=0.00000001;
typedef long long ll;
const ll MOD=998244353;
const ll INF=10000000010;
typedef double db;
typedef unsigned long long ull;
int tot,u[N],v[2*N],w[2*N],pre[2*N];
void add(int x,int y,int z) {
v[tot]=y;w[tot]=z;pre[tot]=u[x];u[x]=tot++;
}
int top,blo,blonum,b[N],d[N],q[N],de[N],f[N][21];
int dfs(int x,int y,int z) {
q[x]=z;de[x]=de[y]+1;f[x][0]=y;
int i,j,siz=0;
for (i=1;i<20;i++)
if ((1<<i)<de[x]) f[x][i]=f[f[x][i-1]][i-1];
for (i=u[x];i!=-1;i=pre[i]) {
if (v[i]==y) continue ;
siz+=dfs(v[i],x,w[i]);
if (siz>=blo) {
blonum++;
for (j=1;j<=siz;j++) b[d[top--]]=blonum;
siz=0;
}
}
d[++top]=x;
return siz+1;
}
struct node {
int u,v,id,bu,bv;
}qu[N];
int n,g[N],bg[N],ans[N];
int cmd(node a,node b) {
if (a.bu!=b.bu) return a.bu<b.bu;
return a.bv<b.bv;
}
int getlca(int x,int y) {
if (de[x]<de[y]) swap(x,y);
for (int i=20;i>=0;i--)
if (de[x]>(1<<i)&&de[x]-(1<<i)>=de[y]) x=f[x][i];
if (x==y) return x;
for (int i=20;i>=0;i--)
if (de[x]>(1<<i)&&f[x][i]!=f[y][i]) { x=f[x][i];y=f[y][i]; }
return f[x][0];
}
void rev(int x) {
if (d[x]) {
d[x]=0;g[q[x]]--;
if (g[q[x]]==0) bg[(q[x]+blo-1)/blo]--;
} else {
d[x]=1;g[q[x]]++;
if (g[q[x]]==1) bg[(q[x]+blo-1)/blo]++;
}
}
void move_v(int x,int y) {
int lca=getlca(x,y);
while (x!=lca) { rev(x);x=f[x][0]; }
while (y!=lca) { rev(y);y=f[y][0]; }
}
int getans() {
int i,j,sum=0,kk=(n+blo-1)/blo;
for (i=1;i<=kk;i++)
if (bg[i]==blo) sum+=blo;
else {
for (j=sum+1;j<=sum+blo;j++)
if (!g[j]) return j;
}
}
int main()
{
int i,m,x,y,z,U,V,lca;
scanf("%d%d", &n, &m);
tot=0;memset(u,-1,sizeof(u));
for (i=1;i<n;i++) {
scanf("%d%d%d", &x, &y, &z);
z++;z=min(z,n);
add(x,y,z);add(y,x,z);
}
blo=(int)sqrt(n);
top=de[1]=blonum=0;
dfs(1,1,0);
blonum++;
while (top) b[d[top--]]=blonum;
for (i=1;i<=m;i++) {
scanf("%d%d", &qu[i].u, &qu[i].v);
qu[i].id=i;qu[i].bu=b[qu[i].u];qu[i].bv=b[qu[i].v];
}
sort(qu+1,qu+m+1,cmd);
memset(d,0,sizeof(d));
U=V=1;
for (i=1;i<=m;i++) {
move_v(U,qu[i].u);
move_v(V,qu[i].v);
U=qu[i].u;V=qu[i].v;
ans[qu[i].id]=getans()-1;
}
for (i=1;i<=m;i++) printf("%d\n", ans[i]);
return 0;
}