#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+100,M=1e7+100;
int m,n;
struct op
{
int p,val;
};
vector<op> o[N];
// int b[N];
namespace hjt
{
#define mid ((l+r)>>1)
int v[N];
struct node
{
int l1,r1,sum,cnt;
}tr[N*570];
int cnt=1;
void pushup(int x)
{
tr[x].sum=tr[tr[x].l1].sum+tr[tr[x].r1].sum;
tr[x].cnt=tr[tr[x].l1].cnt+tr[tr[x].r1].cnt;
}
void add(int pos,int now,int ls,int l,int r,int val)
{
// cout<<pos<<' '<<now<<' '<<ls<<' '<<l<<' '<<r<<' '<<val<<'\n';
if(l==r)
{
tr[now].cnt=tr[ls].cnt;
tr[now].sum=tr[ls].sum;
tr[now].cnt+=val;
tr[now].sum+=pos*val;
// cout<<"A"<<now<<' '<<tr[now].sum<<' '<<pos<<' '<<b[pos]<<' '<<val<<'\n';
return;
}
if(pos<=mid)
{
tr[now].l1=++cnt;
tr[now].r1=tr[ls].r1;
add(pos,tr[now].l1,tr[ls].l1,l,mid,val);
}
else
{
tr[now].r1=++cnt;
tr[now].l1=tr[ls].l1;
add(pos,tr[now].r1,tr[ls].r1,mid+1,r,val);
}
pushup(now);
}
void add(int x)
{
v[x]=v[x-1];
int tmp=v[x-1];
for(auto i:o[x])
{
v[x]=++cnt;
add(i.p,v[x],tmp,1,M,i.val);
tmp=v[x];
}
}
int find(int k,int l,int r,int x)
{
if(tr[x].cnt==0)return 0;
// cout<<x<<' '<<l<<' '<<r<<' '<<k<<'\n';
if(l==r)
{
return l*k;
}
if(tr[x].cnt<=k)
{
return tr[x].sum;
}
int res=0;
res=find(min(k,tr[tr[x].l1].cnt),l,mid,tr[x].l1);
if(k>tr[tr[x].l1].cnt)
{
res+=find(k-tr[tr[x].l1].cnt,mid+1,r,tr[x].r1);
}
return res;
}
int find(int x,int k)
{
return find(k,1,M,v[x]);
}
#undef mid
}using namespace hjt;
signed main()
{
// freopen("P3168_2.in","r",stdin);
cin>>n>>m;
int x,y,z,aa,bb,cc,kk;
for(int i=1;i<=n;i++)
{
cin>>x>>y>>z;
// b[i]=z;
o[x].push_back({z,1});
o[y+1].push_back({z,-1});
}
// sort(b+1,b+1+n);
// int cntt=unique(b+1,b+1+n)-b-1;
// for(int i=1;i<=1e5;i++)
// {
// for(int j=0;j<o[i].size();j++)
// {
// o[i][j].p=lower_bound(b+1,b+1+cntt,o[i][j].p)-b;
// // cout<<i<<' '<<j.p<<' '<<b[j.p]<<'\n';
// }
// }
for(int i=1;i<=1e5;i++)
{
add(i);
}
int pre=1;
// cout<<"a"<<v[1]<<' '<<tr[v[1]].cnt<<'\n';
for(int i=1;i<=m;i++)
{
cin>>x>>aa>>bb>>cc;
kk=1+(aa*pre+bb)%cc;
// cout<<x<<' '<<kk<<'\n';
pre=find(x,kk);
cout<<pre<<'\n';
}
}