#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct Student {
ll s, t, sum;
};
struct Query {
ll x, y, z;
int id;
};
int N, Q;
vector<Student> stu;
vector<Query> qr;
vector<ll> vals;
vector<int> ans;
vector<vector<ll>> seg;
void build(int node, int l, int r) {
if (l == r) return;
int mid = (l + r) >> 1;
build(node << 1, l, mid);
build(node << 1 | 1, mid + 1, r);
}
void add(int node, int l, int r, int pos, ll val) {
seg[node].push_back(val);
if (l == r) return;
int mid = (l + r) >> 1;
if (pos <= mid) add(node << 1, l, mid, pos, val);
else add(node << 1 | 1, mid + 1, r, pos, val);
}
int getCnt(const vector<ll>& v, ll z) {
return (int)(v.end() - lower_bound(v.begin(), v.end(), z));
}
int query(int node, int l, int r, int ql, int qr, ll z) {
if (qr < l || r < ql) return 0;
if (ql <= l && r <= qr)
return getCnt(seg[node], z);
int mid = (l + r) >> 1;
return query(node << 1, l, mid, ql, qr, z)
+ query(node << 1 | 1, mid + 1, r, ql, qr, z);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// freopen("examination.in", "r", stdin);
// freopen("examination.out", "w", stdout);
cin >> N >> Q;
stu.resize(N);
qr.resize(Q);
ans.assign(Q, 0);
for (int i = 0; i < N; i++) {
cin >> stu[i].s >> stu[i].t;
stu[i].sum = stu[i].s + stu[i].t;
vals.push_back(stu[i].t);
}
for (int i = 0; i < Q; i++) {
cin >> qr[i].x >> qr[i].y >> qr[i].z;
qr[i].id = i;
vals.push_back(qr[i].y);
}
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
auto getPos = [&](ll x) {
return (int)(lower_bound(vals.begin(), vals.end(), x) - vals.begin()) + 1;
};
int M = vals.size();
seg.assign(4 * M + 5, vector<ll>());
sort(stu.begin(), stu.end(), [](Student a, Student b) {
return a.s > b.s;
});
sort(qr.begin(), qr.end(), [](Query a, Query b) {
return a.x > b.x;
});
int ptr = 0;
for (auto q : qr) {
while (ptr < N && stu[ptr].s >= q.x) {
add(1, 1, M, getPos(stu[ptr].t), stu[ptr].sum);
ptr++;
}
int L = lower_bound(vals.begin(), vals.end(), q.y) - vals.begin() + 1;
if (L <= M)
ans[q.id] = query(1, 1, M, L, M, q.z);
else
ans[q.id] = 0;
}
for (int i = 1; i <= 4 * M; i++)
sort(seg[i].begin(), seg[i].end());
// phải query lại sau khi sort
ptr = 0;
fill(ans.begin(), ans.end(), 0);
for (auto q : qr) {
while (ptr < N && stu[ptr].s >= q.x) ptr++;
int L = lower_bound(vals.begin(), vals.end(), q.y) - vals.begin() + 1;
if (L <= M)
ans[q.id] = query(1, 1, M, L, M, q.z);
}
for (int i = 0; i < Q; i++)
cout << ans[i] << '\n';
return 0;
}