#include <bits/stdc++.h>
using namespace std;
int n, q;
int a, b, c;
const int nax = 500005;
vector<pair<int, int> > v[nax];
struct ee {
  int l, r, id;
};
long long res[nax];
vector<ee> e[nax];
int j = (1 << 19);
long long t[(1 << 20) + 5];
long long lazy[(1 << 20) + 5];
long long dp[nax];
void akt(int u) { t[u] = min(t[2 * u], t[2 * u + 1]); }
int w[nax][2];
void push(int u) {
  t[2 * u] += lazy[u];
  t[2 * u + 1] += lazy[u];
  lazy[2 * u] += lazy[u];
  lazy[2 * u + 1] += lazy[u];
  lazy[u] = 0;
}
void add(int u, int lewo, int prawo, int x, int y, int ile) {
  if (x > y) return;
  if (y >= prawo and lewo >= x) {
    t[u] += ile;
    lazy[u] += ile;
    return;
  }
  int mid = (lewo + prawo) / 2;
  push(u);
  if (mid >= x) add(2 * u, lewo, mid, x, y, ile);
  if (y > mid) add(2 * u + 1, mid + 1, prawo, x, y, ile);
  akt(u);
}
long long mini(int u, int lewo, int prawo, int x, int y) {
  if (y >= prawo and lewo >= x) return t[u];
  long long wynik = 1e18;
  int mid = (lewo + prawo) / 2;
  push(u);
  if (mid >= x) wynik = mini(2 * u, lewo, mid, x, y);
  if (y > mid) wynik = min(wynik, mini(2 * u + 1, mid + 1, prawo, x, y));
  return wynik;
}
void dfs(int u) {
  w[u][0] = w[u][1] = u;
  for (auto it : v[u]) {
    dp[it.first] = dp[u] + it.second;
    dfs(it.first);
    w[u][1] = max(w[u][1], w[it.first][1]);
  }
}
void go(int u) {
  for (auto it : v[u]) {
    add(1, j, 2 * j - 1, j + w[it.first][0], j + w[it.first][1], -it.second);
    add(1, j, 2 * j - 1, j + 1, j + w[it.first][0] - 1, it.second);
    add(1, j, 2 * j - 1, j + w[it.first][1] + 1, j + n, it.second);
    go(it.first);
    add(1, j, 2 * j - 1, j + w[it.first][0], j + w[it.first][1], it.second);
    add(1, j, 2 * j - 1, j + 1, j + w[it.first][0] - 1, -it.second);
    add(1, j, 2 * j - 1, j + w[it.first][1] + 1, j + n, -it.second);
  }
  for (auto it : e[u]) {
    res[it.id] = mini(1, j, 2 * j - 1, j + it.l, j + it.r);
  }
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cin >> n >> q;
  for (int i = 0; n - 1 > i; ++i) {
    cin >> a >> b;
    v[a].push_back({i + 2, b});
  }
  for (int i = 1; q >= i; ++i) {
    ee p;
    cin >> a >> p.l >> p.r;
    p.id = i;
    e[a].push_back(p);
  }
  dfs(1);
  for (int i = 1; n >= i; ++i) {
    if (i == 1 or ((int)v[i].size()) > 0)
      t[j + i] = 1e18;
    else
      t[j + i] = dp[i];
  }
  for (int i = j - 1; i >= 1; --i) {
    akt(i);
  }
  go(1);
  for (int i = 1; q >= i; ++i) cout << res[i] << " ";
  return 0;
}
