rt
// Author:zymooll
#include<bits/stdc++.h>
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#define int long long
using namespace std;
int read(){
int s = 0, w = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-')w = -1;
c = getchar();
}
while(c >= '0' && c <= '9'){
s = s * 10 + c - '0';
c = getchar();
}
return s * w;
}
void print(int x){
if(x < 0){
putchar('-');
x = -x;
}
if(x >= 10)print(x / 10);
putchar(x % 10 + '0');
return;
}
const int NMax = 1e5;
const int MMax = 1e7;
int n, m;
int rt[MMax + 10];
vector<pair<int, int> >q;
struct SegmentTree{
struct Node{
int sum, tot, l, r;
}t[256 * NMax + 10];
int ncnt;
int clone(int p){
t[++ncnt] = t[p];
return ncnt;
}
void modify(int tl, int& tr, int L, int R, int x, int opt){//1:add -1:del
tr = clone(tl);
t[tr].tot += opt, t[tr].sum += x * opt;
// cerr << tl << " " << tr << " " << L << " " << R << " " << x << " " << opt << endl;
if(L == R)return;
int mid = (L + R) / 2;
if(x <= mid)modify(t[tl].l, t[tr].l, L, mid, x, opt);
else modify(t[tl].r, t[tr].r, mid + 1, R, x, opt);
}
int ask(int p, int L, int R, int k){
// cerr << p << " " << L << " " << R << " " << k << endl;
if(L == R)return t[p].sum - (t[p].tot - k) * L;
int mid = (L + R) / 2;
if(k <= t[t[p].l].tot)return ask(t[p].l, L, mid, k);
else return t[t[p].l].sum + ask(t[p].r, mid + 1, R, k - t[t[p].l].tot);
}
}T;
signed main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n = read(), m = read(); q.reserve(2 * n + 10);
for(int i = 1; i <= n; i++){
int l = read(), r = read(), k = read();
q.push_back(make_pair(l, k));
q.push_back(make_pair(r + 1, -k));
}
sort(q.begin(), q.end());
int now = 0, last = 0;
for(int i = 1; i <= n; i++){
// cerr << i << endl;
while(q[now].first == i){
rt[q[now].first] = 0;
if(q[now].second > 0)T.modify(last, rt[q[now].first], 1, MMax, q[now].second, 1);
else T.modify(last, rt[q[now].first], 1, MMax, -q[now].second, -1);
last = rt[q[now].first]; now++;
// cerr << now << " " << last << endl;
}
if(!rt[i])rt[i] = rt[i - 1];
}
int pre = 1;
while(m--){
int x = read(), a = read(), b = read(), c = read();
int k = 1 + (a * pre + b) % c;
print(pre = T.ask(rt[x], 1, MMax, k)), putchar('\n');
}
return 0;
}