/*
* @Author: hungeazy
* @Date: 2024-08-08 14:21:44
* @Last Modified by: hungeazy
* @Last Modified time: 2024-08-08 15:25:02
*/
#include <bits/stdc++.h>
// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
using namespace std;
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define int long long
#define ull unsigned long long
#define sz(x) x.size()
#define sqr(x) (1LL * (x) * (x))
#define all(x) x.begin(), x.end()
#define fill(f,x) memset(f,x,sizeof(f))
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define FOD(i,r,l) for(int i=r;i>=l;i--)
#define ii pair<int,int>
#define iii pair<int,ii>
#define di pair<ii,ii>
#define vi vector<int>
#define vii vector<ii>
#define mii map<int,int>
#define fi first
#define se second
#define pb push_back
#define MOD 1000000007
#define __lcm(a,b) (1ll * ((a) / __gcd((a), (b))) * (b))
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define MASK(i) (1LL << (i))
#define c_bit(i) __builtin_popcountll(i)
#define BIT(x,i) ((x) & MASK(i))
#define SET_ON(x,i) ((x) | MASK(i))
#define SET_OFF(x,i) ((x) & ~MASK(i))
#define oo 1e18
#define name ""
#define endl '\n'
#define time() cerr << endl << "-------------Time:" << 1000.0 * clock() / CLOCKS_PER_SEC << "ms.";
template<typename T> bool maximize(T &res, const T &val) { if (res < val){ res = val; return true; }; return false; }
template<typename T> bool minimize(T &res, const T &val) { if (res > val){ res = val; return true; }; return false; }
const int N = (int)1e5+10;
int n,q;
vii g[N];
namespace hungeazy {
int ma[N][20],h[N],par[N][20];
void DFS(int u, int p)
{
for (ii x : g[u])
if (x.fi != p)
{
h[x.fi] = h[u]+1;
ma[x.fi][0] = x.se;
par[x.fi][0] = u;
DFS(x.fi,u);
}
}
void init()
{
FOR(j,1,log2(n))
FOR(i,1,n) ma[i][j] = max(ma[i][j-1],ma[par[i][j-1]][j-1]), par[i][j] = par[par[i][j-1]][j-1];
}
int LCA(int x, int y)
{
if (h[x] < h[y]) swap(x,y);
int z = log2(n), ans = -oo;
FOD(i,z,0)
if (h[x]-h[y] >= MASK(i)) ans = max(ans,ma[x][i]), x = par[x][i];
if (x == y) return ans;
FOD(i,z,0)
if (par[x][i] != par[y][i]) ans = max({ans,ma[x][i],ma[y][i]}), x = par[x][i], y = par[y][i];
ans = max({ans,ma[x][0],ma[y][0]});
return ans;
}
void solve(void)
{
DFS(1,-1);
init();
while (q--)
{
int u,v;
cin >> u >> v;
cout << LCA(u,v) << endl;
}
}
}
signed main()
{
fast;
if (fopen(name".inp","r"))
{
freopen(name".inp","r",stdin);
freopen(name".out","w",stdout);
}
cin >> n >> q;
FOR(i,1,n-1)
{
int u,v,w;
cin >> u >> v >> w;
g[u].pb({v,w}); g[v].pb({u,w});
}
hungeazy::solve();
time();
return 0;
}
LyoKKiBAQXV0aG9yOiBodW5nZWF6eQoqIEBEYXRlOiAgIDIwMjQtMDgtMDggMTQ6MjE6NDQKKiBATGFzdCBNb2RpZmllZCBieTogICBodW5nZWF6eQoqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjQtMDgtMDggMTU6MjU6MDIKKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Ci8vICNwcmFnbWEgR0NDIG9wdGltaXplKCJPMyIpICAKLy8gI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpICAKLy8gI3ByYWdtYSBHQ0MgdGFyZ2V0KCJhdngyLGJtaSxibWkyLHBvcGNudCxsemNudCIpICAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBmYXN0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIHN6KHgpIHguc2l6ZSgpCiNkZWZpbmUgc3FyKHgpICgxTEwgKiAoeCkgKiAoeCkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIGZpbGwoZix4KSBtZW1zZXQoZix4LHNpemVvZihmKSkKI2RlZmluZSBGT1IoaSxsLHIpIGZvcihpbnQgaT1sO2k8PXI7aSsrKQojZGVmaW5lIEZPRChpLHIsbCkgZm9yKGludCBpPXI7aT49bDtpLS0pCiNkZWZpbmUgaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGlpaSBwYWlyPGludCxpaT4KI2RlZmluZSBkaSBwYWlyPGlpLGlpPgojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdmlpIHZlY3RvcjxpaT4KI2RlZmluZSBtaWkgbWFwPGludCxpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIF9fbGNtKGEsYikgKDFsbCAqICgoYSkgLyBfX2djZCgoYSksIChiKSkpICogKGIpKQojZGVmaW5lIFlFUyBjb3V0IDw8ICJZRVNcbiIKI2RlZmluZSBOTyBjb3V0IDw8ICJOT1xuIgojZGVmaW5lIE1BU0soaSkgKDFMTCA8PCAoaSkpCiNkZWZpbmUgY19iaXQoaSkgX19idWlsdGluX3BvcGNvdW50bGwoaSkKI2RlZmluZSBCSVQoeCxpKSAoKHgpICYgTUFTSyhpKSkKI2RlZmluZSBTRVRfT04oeCxpKSAoKHgpIHwgTUFTSyhpKSkKI2RlZmluZSBTRVRfT0ZGKHgsaSkgKCh4KSAmIH5NQVNLKGkpKQojZGVmaW5lIG9vIDFlMTgKI2RlZmluZSBuYW1lICIiCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgdGltZSgpIGNlcnIgPDwgZW5kbCA8PCAiLS0tLS0tLS0tLS0tLVRpbWU6IiA8PCAxMDAwLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIm1zLiI7CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgbWF4aW1pemUoVCAmcmVzLCBjb25zdCBUICZ2YWwpIHsgaWYgKHJlcyA8IHZhbCl7IHJlcyA9IHZhbDsgcmV0dXJuIHRydWU7IH07IHJldHVybiBmYWxzZTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIG1pbmltaXplKFQgJnJlcywgY29uc3QgVCAmdmFsKSB7IGlmIChyZXMgPiB2YWwpeyByZXMgPSB2YWw7IHJldHVybiB0cnVlOyB9OyByZXR1cm4gZmFsc2U7IH0KY29uc3QgaW50IE4gPSAoaW50KTFlNSsxMDsKaW50IG4scTsKdmlpIGdbTl07CgpuYW1lc3BhY2UgaHVuZ2VhenkgewoKCWludCBtYVtOXVsyMF0saFtOXSxwYXJbTl1bMjBdOwoKCXZvaWQgREZTKGludCB1LCBpbnQgcCkKCXsKCQlmb3IgKGlpIHggOiBnW3VdKQoJCQlpZiAoeC5maSAhPSBwKQoJCQl7CgkJCQloW3guZmldID0gaFt1XSsxOwoJCQkJbWFbeC5maV1bMF0gPSB4LnNlOwoJCQkJcGFyW3guZmldWzBdID0gdTsKCQkJCURGUyh4LmZpLHUpOwoJCQl9Cgl9CgoJdm9pZCBpbml0KCkKCXsKCQlGT1IoaiwxLGxvZzIobikpCgkJCUZPUihpLDEsbikgbWFbaV1bal0gPSBtYXgobWFbaV1bai0xXSxtYVtwYXJbaV1bai0xXV1bai0xXSksIHBhcltpXVtqXSA9IHBhcltwYXJbaV1bai0xXV1bai0xXTsKCX0KCglpbnQgTENBKGludCB4LCBpbnQgeSkKCXsKCQlpZiAoaFt4XSA8IGhbeV0pIHN3YXAoeCx5KTsKCQlpbnQgeiA9IGxvZzIobiksIGFucyA9IC1vbzsKCQlGT0QoaSx6LDApCgkJCWlmIChoW3hdLWhbeV0gPj0gTUFTSyhpKSkgYW5zID0gbWF4KGFucyxtYVt4XVtpXSksIHggPSBwYXJbeF1baV07CgkJaWYgKHggPT0geSkgcmV0dXJuIGFuczsKCQlGT0QoaSx6LDApCgkJCWlmIChwYXJbeF1baV0gIT0gcGFyW3ldW2ldKSBhbnMgPSBtYXgoe2FucyxtYVt4XVtpXSxtYVt5XVtpXX0pLCB4ID0gcGFyW3hdW2ldLCB5ID0gcGFyW3ldW2ldOwoJCWFucyA9IG1heCh7YW5zLG1hW3hdWzBdLG1hW3ldWzBdfSk7CgkJcmV0dXJuIGFuczsKCX0KCgl2b2lkIHNvbHZlKHZvaWQpCgl7CgkJREZTKDEsLTEpOwoJCWluaXQoKTsKCQl3aGlsZSAocS0tKQoJCXsKCQkJaW50IHUsdjsKCQkJY2luID4+IHUgPj4gdjsKCQkJY291dCA8PCBMQ0EodSx2KSA8PCBlbmRsOwoJCX0KCX0KCQp9CgpzaWduZWQgbWFpbigpCnsKICAgIGZhc3Q7CiAgICBpZiAoZm9wZW4obmFtZSIuaW5wIiwiciIpKQogICAgewogICAgCWZyZW9wZW4obmFtZSIuaW5wIiwiciIsc3RkaW4pOwogICAgCWZyZW9wZW4obmFtZSIub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuID4+IHE7CiAgICBGT1IoaSwxLG4tMSkKICAgIHsKICAgIAlpbnQgdSx2LHc7CiAgICAJY2luID4+IHUgPj4gdiA+PiB3OwogICAgCWdbdV0ucGIoe3Ysd30pOyBnW3ZdLnBiKHt1LHd9KTsKICAgIH0KICAgIGh1bmdlYXp5Ojpzb2x2ZSgpOwogICAgdGltZSgpOwogICAgcmV0dXJuIDA7Cn0=