#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int res=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){res=(res<<1)+(res<<3)+(c^48);c=getchar();}
return res*f;
}
void write(int x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)write(x/10);
putchar(x%10+'0');
}
//-------SegmentTreeBegin-------
namespace Elaina
{
struct node
{
int l,r,val,cnt;
}t[114514<<5];
int cnt,rt[114514];
int bld(int l,int r,int root)
{
root=++cnt;
if(l==r) return root;
int mid=l+r>>1;
t[root].l=bld(l,mid,t[root].l);
t[root].r=bld(mid+1,r,t[root].r);
return root;
}
int insert(int x,int l,int r,int root,int v)
{
int cur=++cnt;
t[cur]=t[root];
if(l==r)
{
t[cur].val+=v*l;
t[cur].cnt+=v;
return cur;
}
int mid=l+r>>1;
if(x<=mid) t[cur].l=insert(x,l,mid,t[cur].l,v);
else t[cur].r=insert(x,mid+1,r,t[cur].r,v);
t[cur].val=t[t[cur].l].val+t[t[cur].r].val;
t[cur].cnt=t[t[cur].l].cnt+t[t[cur].r].cnt;
return cur;
}
int query(int l,int r,int root,int k)
{
if(l==r) return k*l;
int mid=l+r>>1;
if(t[t[root].l].cnt<k)
return t[t[root].l].val+query(mid+1,r,t[root].r,k-t[t[root].l].cnt);
return query(l,mid,t[root].l,k);
}
}
#define rt Elaina::rt
#define bld Elaina::bld
#define insert Elaina::insert
#define query Elaina::query
#define t Elaina::t
//--------SegmentTreeEnd--------
struct node
{
int d,p,l;
}a[114514<<1];
bool cmp(node x,node y)
{
return x.d<y.d;
}
int n,m;
signed main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
a[i].d=read(),a[i].p=read(),a[i].l=read();
rt[100001]=bld(1,1e5,rt[100001]);
sort(a+1,a+n+1,cmp);
int cur=n;
for(int i=1e5;i>=1;i--)
{
rt[i]=rt[i+1];
while(a[cur].d>=i&&cur>=1)
{
rt[i]=insert(a[cur].p,1,1e5,rt[i+1],a[cur].l);
--cur;
}
}
for(int i=1;i<=m;i++)
{
int x=read(),y=read();
int l=1,r=1e5,ans=-1;
if(t[rt[1]].cnt<y)
{
puts("-1");
continue;
}
while(l<=r)
{
int mid=l+r>>1;
if(query(1,1e5,rt[mid],y)<=x)
ans=mid,l=mid+1;
else r=mid-1;
}
write(ans),puts("");
}
}