#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#define all(x) (x).begin(), (x).end()
#define MASK(i) (1LL<<(i))
#define BIT(i,n) (((n)>>(i)) & 1LL)
#define MIN_HIGH(x, y) (h[x] < h[y] ? (x) : (y));
template <class X, class Y>
bool minimize(X& x, const Y& y)
{
if(x > y){
x = y;
return 1;
}
return 0;
}
template <class X, class Y>
bool maximize(X& x, const Y& y)
{
if(x < y){
x = y;
return 1;
}
return 0;
}
const int N = 1e3 + 5;
const int LOG = 10;
int n, q, nodes[N << 1], d[N], pos[N], h[N], cnt = 0, minH[LOG + 2][N << 1];
vector<pair<int, int>> adj[N];
void dfs(int x, int p)
{
nodes[++cnt] = x;
pos[x] = cnt;
for(const auto& y : adj[x]) if(y.fi != p) {
d[y.fi] = d[x] + y.se;
h[y.fi] = h[x] + 1;
dfs(y.fi, x);
nodes[++cnt] = x;
}
}
int lca(int x, int y)
{
int px = pos[x], py = pos[y];
if(px > py) swap(px, py);
int k = 31 - __builtin_clz(py - px + 1);
return MIN_HIGH(minH[k][px], minH[k][py - MASK(k) + 1]);
}
void process()
{
cin >> n >> q;
for(int i = 1; i < n; ++i){
int u, v, w; cin >> u >> v >> w;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
dfs(1, -1);
for(int i = 1; i <= cnt; ++i)
minH[0][i] = nodes[i];
for(int j = 1; j <= LOG; ++j)
for(int i = 1; i + MASK(j) - 1 <= cnt; ++i)
minH[j][i] = MIN_HIGH(minH[j - 1][i], minH[j - 1][i + MASK(j - 1)]);
while(q--){
int x, y; cin >> x >> y;
cout << d[x] + d[y] - 2 * d[lca(x, y)] << "\n";
}
}
int main()
{
ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define file "thieufilethinguhetcuu"
if(fopen(file".inp","r")){
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
int _ = 1;
// cin >> _;
while(_--){
process();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksICh4KS5lbmQoKQojZGVmaW5lIE1BU0soaSkgKDFMTDw8KGkpKQojZGVmaW5lIEJJVChpLG4pICgoKG4pPj4oaSkpICYgMUxMKQojZGVmaW5lIE1JTl9ISUdIKHgsIHkpIChoW3hdIDwgaFt5XSA/ICh4KSA6ICh5KSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4KICAgIGJvb2wgbWluaW1pemUoWCYgeCwgY29uc3QgWSYgeSkKICAgIHsKICAgICAgICBpZih4ID4geSl7CiAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4KICAgIGJvb2wgbWF4aW1pemUoWCYgeCwgY29uc3QgWSYgeSkKICAgIHsKICAgICAgICBpZih4IDwgeSl7CiAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cgpjb25zdCBpbnQgTiA9IDFlMyArIDU7CmNvbnN0IGludCBMT0cgPSAxMDsKCmludCBuLCBxLCBub2Rlc1tOIDw8IDFdLCBkW05dLCBwb3NbTl0sIGhbTl0sIGNudCA9IDAsIG1pbkhbTE9HICsgMl1bTiA8PCAxXTsKdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBhZGpbTl07Cgp2b2lkIGRmcyhpbnQgeCwgaW50IHApCnsKICAgIG5vZGVzWysrY250XSA9IHg7CiAgICBwb3NbeF0gPSBjbnQ7CiAgICBmb3IoY29uc3QgYXV0byYgeSA6IGFkalt4XSkgaWYoeS5maSAhPSBwKSB7CiAgICAgICAgZFt5LmZpXSA9IGRbeF0gKyB5LnNlOwogICAgICAgIGhbeS5maV0gPSBoW3hdICsgMTsKICAgICAgICBkZnMoeS5maSwgeCk7CiAgICAgICAgbm9kZXNbKytjbnRdID0geDsKICAgIH0KfQoKaW50IGxjYShpbnQgeCwgaW50IHkpCnsKICAgIGludCBweCA9IHBvc1t4XSwgcHkgPSBwb3NbeV07CiAgICBpZihweCA+IHB5KSBzd2FwKHB4LCBweSk7CgogICAgaW50IGsgPSAzMSAtIF9fYnVpbHRpbl9jbHoocHkgLSBweCArIDEpOwogICAgcmV0dXJuIE1JTl9ISUdIKG1pbkhba11bcHhdLCBtaW5IW2tdW3B5IC0gTUFTSyhrKSArIDFdKTsKfQoKdm9pZCBwcm9jZXNzKCkKewogICAgY2luID4+IG4gPj4gcTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyArK2kpewogICAgICAgIGludCB1LCB2LCB3OyBjaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh7diwgd30pOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2soe3UsIHd9KTsKICAgIH0KCiAgICBkZnMoMSwgLTEpOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gY250OyArK2kpCiAgICAgICAgbWluSFswXVtpXSA9IG5vZGVzW2ldOwogICAgZm9yKGludCBqID0gMTsgaiA8PSBMT0c7ICsraikKICAgICAgICBmb3IoaW50IGkgPSAxOyBpICsgTUFTSyhqKSAtIDEgPD0gY250OyArK2kpCiAgICAgICAgICAgIG1pbkhbal1baV0gPSBNSU5fSElHSChtaW5IW2ogLSAxXVtpXSwgbWluSFtqIC0gMV1baSArIE1BU0soaiAtIDEpXSk7CgogICAgd2hpbGUocS0tKXsKICAgICAgICBpbnQgeCwgeTsgY2luID4+IHggPj4geTsKICAgICAgICBjb3V0IDw8IGRbeF0gKyBkW3ldIC0gMiAqIGRbbGNhKHgsIHkpXSA8PCAiXG4iOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCksY2luLnRpZSgwKSxjb3V0LnRpZSgwKTsKICAgICNkZWZpbmUgZmlsZSAidGhpZXVmaWxldGhpbmd1aGV0Y3V1IgogICAgaWYoZm9wZW4oZmlsZSIuaW5wIiwiciIpKXsKICAgICAgICBmcmVvcGVuKGZpbGUiLmlucCIsInIiLHN0ZGluKTsKICAgICAgICBmcmVvcGVuKGZpbGUiLm91dCIsInciLHN0ZG91dCk7CiAgICB9CiAgICBpbnQgXyA9IDE7Ci8vICAgIGNpbiA+PiBfOwogICAgd2hpbGUoXy0tKXsKICAgICAgICBwcm9jZXNzKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=