#include<cstdio>
#include<algorithm>
typedef long long lint;
const int N=20000000,mx=131072;
int m,n;
struct op{
int t,v;
bool s;
op(){}
op(int t_,int v_,bool s_):t(t_),v(v_),s(s_){}
};
bool operator<(op a,op b){
return a.t<b.t;
}
op ops[200005];
int opp=0;
int vs[100005],vp=0;
int lc[N],rc[N],sz[N];
lint sum[N];
int rts[100005];
int p=1;
lint get(int w,int x,int L,int R){
//printf("g[%d,%d] x:%d\n",L,R,x);
int M=L+R>>1;
if(sz[w]<=x)return sum[w];
if(L==R)return vs[L-1]*1ll*x;
if(sz[lc[w]]>=x)return get(lc[w],x,L,M);
return sum[lc[w]]+get(rc[w],x-sz[lc[w]],M+1,R);
}
int add(int w,int v,bool s,int x,int L,int R){
//printf("[%d,%d] v:%d s:%d x:%d\n",L,R,v,(int)s,x);
int u=p++;
if(L==R){
if(s){
sz[u]=sz[w]+1;
sum[u]=sum[w]+v;
}else{
sz[u]=sz[w]-1;
sum[u]=sum[w]-v;
}
lc[u]=rc[u]=0;
}else{
int M=L+R>>1;
if(x>M){
rc[u]=add(rc[w],v,s,x,M+1,R);
lc[u]=lc[w];
}else{
lc[u]=add(lc[w],v,s,x,L,M);
rc[u]=rc[w];
}
sz[u]=sz[lc[u]]+sz[rc[u]];
sum[u]=sum[lc[u]]+sum[rc[u]];
}
return u;
}
int build(int L,int R){
int w=p++;
int M=L+R>>1;
if(L<R){
lc[w]=build(L,M);
rc[w]=build(M+1,R);
}
sz[w]=sum[w]=0;
return w;
}
int main(){
int a,b,c,x;
lint pre=1ll;
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
ops[opp++]=op(a,c,1);
ops[opp++]=op(b+1,c,0);
vs[vp++]=c;
}
std::sort(ops,ops+opp);
std::sort(vs,vs+vp);
int vm=vp;vp=1;
for(int i=1;i<vm;i++)if(vs[i]>vs[i-1])vs[vp++]=vs[i];
rts[0]=build(1,mx);
for(int i=1,oi=0;i<=n;i++){
rts[i]=rts[i-1];
while(oi<opp&&ops[oi].t==i){
rts[i]=add(rts[i],ops[oi].v,ops[oi].s,std::upper_bound(vs,vs+vp,ops[oi].v)-vs,1,mx);
oi++;
}
}
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&x,&a,&b,&c);
pre=get(rts[x],(a*pre%c+b)%c+1,1,mx);
printf("%lld\n",pre);
}
return 0;
}