#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using tll = tuple<ll, ll, ll>;
void init() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
int main() {
init();
ll n, m;
cin >> n >> m;
vector<ll> x(n + 1), y(n + 1);
for (ll i = 1; i <= n; i++) {
cin >> x[i] >> y[i];
}
vector<vector<tll>> gr(n + 1);
for (ll u, v, w, i = 1; i <= m; i++) {
cin >> u >> v >> w;
gr[u].emplace_back(v, w, i);
}
for (ll i = 1; i <= n; i++) {
ranges::sort(gr[i], [&](tll ap, tll bp) {
ll a = get<0>(ap), b = get<0>(bp);
ll ax = x[a] - x[i], ay = y[a] - y[i];
ll bx = x[b] - x[i], by = y[b] - y[i];
return ax * by - ay * bx > 0;
});
}
gr[1].emplace(gr[1].begin(), n, 0, 0);
gr[1].emplace_back(n, 0, 0);
vector<ll> dp(n + 1), vst(n + 1), pre(n + 1), pw(n + 1);
vector<ll> pi(n + 1), ans(m + 1), lv(n + 1);
function<void(ll)> dfs = [&](ll cur) {
vst[cur] = 1;
for (auto& [nxt, w, i] : gr[cur]) {
if (vst[nxt]) {
ll v, mx = 0;
for (v = nxt; vst[v] != 1; v = pre[v]) {
mx = max(mx, dp[v]);
}
for (v = nxt; vst[v] != 1; v = pre[v]) {
ans[pi[v]] = mx - lv[v];
}
pre[nxt] = cur;
pw[nxt] = w;
pi[nxt] = i;
for (ll u = nxt; u != v; u = pre[u]) {
lv[u] = mx;
dp[u] = mx + pw[u];
}
} else {
pre[nxt] = cur;
pw[nxt] = w;
pi[nxt] = i;
dfs(nxt);
}
}
vst[cur] = 2;
};
dfs(1);
for (ll i = 1; i <= m; i++) {
cout << ans[i] << '\n';
}
return 0;
}