#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ls (id*2)
#define rs (id*2+1)
#define mid ((l+r)/2)
#define mid2 ((cl+cr)/2)
const int N=114514*2;
inline int read(){
int f=1,c=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){c=10*c+ch-'0';ch=getchar();}
return f*c;
}
inline void write(int z){
if(z<0)putchar('-'),z=-z;
if(z>9)write(z/10);
putchar(z%10+'0');
return;
}
int n=read(),m=read();
struct node{
int l,p;
}t[N*4];
void merge(int id){
t[id].p=t[ls].p+t[rs].p,t[id].l=t[ls].l+t[rs].l;
}
void updata(int id,int p,int k,int l,int r){
if(l==r){t[id].l+=k,t[id].p=l*t[id].l;return;}
if(p<=mid)updata(ls,p,k,l,mid);
else updata(rs,p,k,mid+1,r);
merge(id);
}
int ask(int id,int k,int l,int r){
if(!k)return 0;
if(l==r)return l*k;
if(t[ls].l>=k)return ask(ls,k,l,mid);
return t[ls].p+ask(rs,k-t[ls].l,mid+1,r);
}
struct j{int d,p,l;}a[N];
struct child{int m,l,id;}q[N];
int cnt;
void init(){
for(int i=1;i<=n;i++)a[i]={read(),read(),read()};
a[++n]={-1,0,0};
sort(a+1,a+n+1,[&](j a,j b)->bool{return a.d>b.d;});
for(int i=1;i<=m;i++)q[i]={read(),read(),i};
}
int ans[N];
void doit(int l,int r,int cl,int cr){
if(l>r)return;
if(cl==cr){
for(int i=l;i<=r;i++)ans[q[i].id]=a[cl].d;
return;
}
vector<child>L;
vector<child>R;
L.emplace_back(0,0,0);
R.emplace_back(0,0,0);
while(cnt<mid2) ++cnt,updata(1,a[cnt].p,a[cnt].l,1,n);
while(cnt>mid2) updata(1,a[cnt].p,-a[cnt].l,1,n),--cnt;
for(int i=l;i<=r;i++){
(t[1].l>=q[i].l&&ask(1,q[i].l,1,n)<=q[i].m)?
(L.emplace_back(q[i])):
(R.emplace_back(q[i]));
}
for(int i=1;i<L.size();i++)q[l+i-1]=L[i];
for(int i=1;i<R.size();i++)q[l+L.size()+i-2]=R[i];
doit(l,l+L.size()-2,cl,mid2);
doit(l+L.size()-1,r,mid2+1,cr);
}
signed main(){
init();
doit(1,m,1,n);
for(int i=1;i<=m;i++)write(ans[i]),putchar('\n');
}
难道牛逼到我的线段树只支持n=100000吧