RT
#include<bits/stdc++.h>
#define Maxn 5000600
#define N 200020
#define int long long
using namespace std;
int s[N];
int e[N];
int p[N];
int tmp[N];
int to[N];
int rt[Maxn];
vector<int> ts[N];
vector<int> te[N];
int tot=0;
struct HJT_Tree{
int l;
int r;
int sum;
int num;
}t[Maxn];
void change(int k,int &p,int l,int r,int P,int v,int S)
{
//cout<<p<<' '<<l<<'%'<<r<<'\n';
p=++tot;
t[p]=t[k];
t[p].num+=v;
t[p].sum+=S;
if(l==r)
{
return;
}
int mid=l+r>>1;
if(P>mid)
{
/* if(!t[p].l)t[p].l=t[k].l;t[p].r=++tot;t[t[p].r]=t[t[k].r];*/
change(t[k].r,t[p].r,mid+1,r,P,v,S);
}
else
{
/* if(!t[p].r)t[p].r=t[k].r;t[p].l=++tot;t[t[p].l]=t[t[k].l];*/
change(t[k].l,t[p].l,l,mid,P,v,S);
}
// cout<<p<<'%'<<t[p].l<<' '<<t[p].r<<'\n';
//upd(p);
}
int query(int p,int l,int r,int k)
{
// cout<<p<<' '<<l<<'&'<<r<<'\n';
if(l==r)
{
// cout<<p<<' '<<t[p].sum<<' '<<t[p].num<<'\n';
//if(t[p].num==0)return 0;
return t[p].sum/t[p].num*k;
}
int mid=l+r>>1;
int V=t[t[p].l].num;
// cout<<k<<"&&&"<<V<<'\n';
if(k<=V)return query(t[p].l,l,mid,k);
else return t[t[p].l].sum+query(t[p].r,mid+1,r,k-V);
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;++i)
{
cin>>s[i]>>e[i]>>p[i];
tmp[i]=p[i];
}
// cout<<'*'<<'\n';
sort(tmp+1,tmp+n+1);
int T=unique(tmp+1,tmp+n+1)-tmp-1;
for(int i=1;i<=n;++i)
{
int k=lower_bound(tmp+1,tmp+T+1,p[i])-tmp;to[k]=p[i];p[i]=k;
}
// cout<<T<<"&\n";
for(int i=1;i<=n;++i)
{
ts[s[i]].push_back(p[i]);
te[e[i]+1].push_back(p[i]);
}
bool f=0;
for(int i=1;i<=m+1;++i)
{
// f=1;
rt[i]=rt[i-1];
for(int j=0;j<ts[i].size();++j)
{
f=0;
int k=ts[i][j];
// cout<<i<<'!'<<k<<' '<<1<<' '<<to[k]<<'\n';
change(rt[i],rt[i],1,T,k,1,to[k]);
}
for(int j=0;j<te[i].size();++j)
{
f=0;
int k=te[i][j];
// cout<<i<<'!'<<k<<' '<<-1<<' '<<-to[k]<<'\n';
change(rt[i],rt[i],1,T,k,-1,-to[k]);
}
//if(f)rt[i]=rt[i-1];
}
int lst=1;
for(int i=1;i<=m;++i)
{
int _x,_a,_b,_c;
cin>>_x>>_a>>_b>>_c;
int K=1+(_a*lst+_b)%_c;
// cout<<_x<<'#'<<K<<'\n';
lst=query(rt[_x],1,T,K);
cout<<lst<<'\n';
}
return 0;
}