#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 2e5 + 5;
struct peal
{
int s, t, sum;
int id;
int type;
bool operator < (const peal &other) const
{
if (s != other.s)
{
return s > other.s;
}
return type < other.type;
}
};
int n, q;
int s, t;
vector<peal> a;
vector<peal> b;
vector<int> lon;
int bit[MAXN];
int maxx;
int ans[MAXN];
void update(int pos, int val)
{
for (int i = pos; i <= maxx; i += i & -i)
{
bit[i] += val;
}
}
int query(int idx)
{
int res = 0;
for (int i = idx; i > 0; i -= i & -i)
{
res += bit[i];
}
return res;
}
void cdq(int l, int r)
{
if (l >= r)
{
return;
}
int mid = (l + r) / 2;
cdq(l, mid);
cdq(mid + 1, r);
int i = l;
int j = mid + 1;
int k = l;
int total = 0;
while(i <= mid and j <= r)
{
if (a[i].t >= a[j].t)
{
if (a[i].type == 0)
{
update(a[i].sum, 1);
total++;
}
b[k++] = a[i++];
}
else
{
if (a[j].type == 1)
{
int cur = query(a[j].sum - 1);
ans[a[j].id] += total - cur;
}
b[k++] = a[j++];
}
}
while(i <= mid)
{
if (a[i].type == 0)
{
update(a[i].sum, 1);
total++;
}
b[k++] = a[i++];
}
while(j <= r)
{
if (a[j].type == 1)
{
int cur = query(a[j].sum - 1);
ans[a[j].id] += total - cur;
}
b[k++] = a[j++];
}
for (int p = l; p <= mid; p++)
{
if (a[p].type == 0)
{
update(a[p].sum, -1);
}
}
for (int p = l; p <= r; p++)
{
a[p] = b[p];
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> q;
for (int i = 0; i < n; i++)
{
int s, t;
cin >> s >> t;
a.push_back({s, t, s + t, -1, 0});
lon.push_back(s + t);
}
for (int i = 0; i < q; i++)
{
int x, y, z;
cin >> x >> y >> z;
a.push_back({x, y, z, i, 1});
lon.push_back(z);
}
sort(lon.begin(), lon.end());
lon.erase(unique(lon.begin(), lon.end()), lon.end());
maxx = lon.size();
for (auto &e : a)
{
e.sum = lower_bound(lon.begin(), lon.end(), e.sum) - lon.begin() + 1;
}
sort(a.begin(), a.end());
b.resize(n + q);
memset(bit, 0, sizeof(bit));
memset(ans, 0, sizeof(ans));
cdq(0, n + q - 1);
for (int i = 0; i < q; i++)
{
cout << ans[i] << "\n";
}
}