#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
struct HashPair {
size_t operator()(const pair<long long, long long>& p) const {
return hash<long long>()(p.first) ^
(hash<long long>()(p.second) << 1);
}
};
unordered_map<pair<long long, long long>, long long, HashPair> m[61][61];
long long n, q, x, y, v, res;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> x >> y >> v;
int lx = 63 - __builtin_clzll(x);
int ly = 63 - __builtin_clzll(y);
long long rx = x % (1LL << lx);
long long ry = y % (1LL << ly);
m[lx][ly][{rx, ry}] += v;
}
for (int i = 1; i <= q; i++) {
cin >> x >> y;
res = 0;
for (int lx = 0; lx <= 60; lx++) {
long long llx = (1LL << lx);
if (llx > x) break;
long long rx = x % llx;
for (int ly = 0; ly <= 60; ly++) {
long long lly = (1LL << ly);
if (lly > y) break;
long long ry = y % lly;
auto it = m[lx][ly].find({rx, ry});
if (it != m[lx][ly].end()) {
res += it->second;
}
}
}
cout << res << endl;
}
return 0;
}