#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 5, M = N * 64;
int seg, n, m;
int root[N];
struct Seg
{
int lf, rt;
int price, weight;
}tr[M];
struct juice
{
int d, p, l;
}a[N];
bool cmp(juice x, juice y)
{
return x.d > y.d;
}
void Seg_modify(int &x, int y, int l, int r, int price, int limit)
{
x = ++seg;
tr[x] = tr[y];
tr[x].weight += limit;
tr[x].price += price * limit;
if (l == price && r == price) return ;
int mid = l + (r - l) / 2;
if (price <= mid) Seg_modify(tr[x].lf, tr[y].lf, l, mid, price, limit);
else Seg_modify(tr[x].rt, tr[y].rt, mid + 1, r, price, limit);
}
int Seg_query(int x, int l, int r, int k)
{
if (l == r) return l * k;
int mid = l + (r - l) / 2;
if (tr[tr[x].lf].weight >= k) return Seg_query(tr[x].lf, l, mid, k);
else return tr[tr[x].lf].price + Seg_query(tr[x].rt, mid + 1, r, k - tr[tr[x].lf].weight);
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i].d >> a[i].p >> a[i].l;
sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= n; i++)
Seg_modify(root[i], root[i - 1], 1, n, a[i].p, a[i].l);
while(m--)
{
int price, limit;
cin >> price >> limit;
int l = 1, r = n, ans = -1;
while (l <= r)
{
int mid = l + (r - l) / 2;
if (Seg_query(root[mid], 1, n, limit) <= price && tr[root[mid]].weight >= limit) r = mid - 1, ans = mid;
else l = mid + 1;
}
if (ans == -1) cout << -1 << "\n";
else cout << a[r + 1].d << "\n";
}
return 0;
}