#include <bits/stdc++.h>
using namespace std;
#define short int32_t
#define int int64_t
#define long __int128_t
const int inf{numeric_limits<int>::max() / 4};
struct Point {
int x, y, z, id{-1};
};
struct FenwickTree {
int size{};
vector<int> tree{};
FenwickTree() {}
FenwickTree(int size) : size(size) {
tree.assign(size, 0);
}
void add(int pos, int val) {
for (int i{pos}; i < size; i |= i + 1) {
tree[i] += val;
}
}
int get(int pos) {
int res{0};
for (int i{pos}; i >= 0; i = (i & (i + 1)) - 1) {
res += tree[i];
}
return res;
}
};
struct FenwickTree2d {
int size_x{};
vector<FenwickTree> tree{};
vector<map<int, int>> cc{};
vector<int> cc_sizes{};
FenwickTree2d(int size_x, const vector<Point>& points) : size_x(size_x) {
tree.resize(size_x);
cc.resize(size_x);
cc_sizes.assign(size_x, 0);
for (auto& [x, y, _z, _i] : points) {
for (int i{x}; i < size_x; i |= i + 1) {
cc[i][y] = 0;
}
}
for (int x{0}; x < size_x; x++) {
for (auto& [_, i] : cc[x]) {
i = cc_sizes[x]++;
}
tree[x] = FenwickTree(cc_sizes[x]);
}
}
void add(int x, int y, int val) {
for (int i{x}; i < size_x; i |= i + 1) {
tree[i].add(cc[i][y], val);
}
}
int get(int x, int y) {
int res{0};
for (int i{x}; i >= 0; i = (i & (i + 1)) - 1) {
auto iter{cc[i].upper_bound(y)};
int comp_y{iter == cc[i].begin() ? -1 : prev(iter)->second};
res += tree[i].get(comp_y);
}
return res;
}
};
short main() {
#ifndef LOCAL
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
#endif
int n, q;
cin >> n >> q;
map<int, int> xcc{};
int xcc_size{0};
vector<Point> points(n);
vector<Point> queries(q);
for (int i{0}; i < n; i++) {
int s, t;
cin >> s >> t;
points[i] = {-s, -t, -s - t};
}
for (int i{0}; i < q; i++) {
int x, y, z;
cin >> x >> y >> z;
queries[i] = {-x, -y, -z, i};
}
for (auto [x, y, z, _] : points) {
xcc[x] = 0;
}
for (auto [x, y, z, _] : queries) {
xcc[x] = 0;
}
for (auto& [_, index] : xcc) {
index = xcc_size++;
}
for (auto& [x, y, z, _] : points) {
x = xcc[x];
}
for (auto& [x, y, z, _] : queries) {
x = xcc[x];
}
sort(points.begin(), points.end(), [&](const auto& a, const auto& b) {
return a.z < b.z;
});
sort(queries.begin(), queries.end(), [&](const auto& a, const auto& b) {
return a.z < b.z;
});
vector<int> anss(q);
FenwickTree2d ft2(xcc_size, points);
for (int ni{0}, qi{0}; qi < q; qi++) {
auto [x, y, z, id]{queries[qi]};
for (; ni < n && points[ni].z <= z; ni++) {
ft2.add(points[ni].x, points[ni].y, 1);
}
anss[id] = ft2.get(x, y);
}
for (int i : anss) {
cout << i << "\n";
}
return 0;
}