#include <bits/stdc++.h>
using namespace std;
//
const int maxN = 1005;
//
int N, Q, d[maxN], h[maxN], up[maxN][20];
vector<pair<int, int>> edge[maxN];
//
void DFS (int u)
{
    int v, l;
    //
    for (pair<int, int> p : edge[u])
    {
        v = p.first, l = p.second;
        if (v == up[u][0])
            continue;
        d[v] = d[u] + l;
        h[v] = h[u] + 1;
        up[v][0] = u;
        for (int i = 1; i < 20; ++i)
            up[v][i] = up[up[v][i - 1]][i - 1];
        DFS(v);
    }
}
int LCA (int u, int v)
{
    if (h[u] != h[v])
    {
        if (h[u] < h[v])
            swap(u, v);
        for (int k = h[u] - h[v], i = 0; (1 << i) <= k; ++i)
            if (k >> i & 1)
                u = up[u][i];
    }
    if (u == v)
        return u;
    for (int i = __lg(h[v]); i >= 0; --i)
        if (up[u][i] != up[v][i])
            u = up[u][i], v = up[v][i];
    return up[v][0];
}
//
void process (void)
{
    int A, B, L;
    //
    cin >> N >> Q;
    for (int i = 1; i < N; ++i)
        cin >> A >> B >> L,
        edge[A].emplace_back(B, L),
        edge[B].emplace_back(A, L);

    DFS(1);

    while (Q--)
        cin >> A >> B,
        cout << d[A] + d[B] - d[LCA(A, B)] * 2 << '\n';
}
//
signed main (void)
{
    ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    process();
}
