#include <bits/stdc++.h>
const long long inf = 1e17;
struct SegmentTree {
struct Node {
long long val;
long long lazy;
bool is_lazy;
explicit Node(long long x = -inf) {
val = x;
lazy = 0;
is_lazy = false;
}
void change(long long x) {
val += x;
lazy += x;
is_lazy = true;
}
};
int tree_size;
std::vector<Node> seg_data;
explicit SegmentTree(int n) {
tree_size = 1;
while (tree_size < n) tree_size *= 2;
seg_data.assign(2 * tree_size, Node());
}
static Node merge(const Node &lf, const Node & ri) {
Node ans = Node();
ans.val = std::max(lf.val, ri.val);
return ans;
}
void propagate(int ni, int lx, int rx) {
if(!seg_data[ni].is_lazy || rx - lx == 1) return;
seg_data[ 2 * ni + 1].change(seg_data[ni].lazy);
seg_data[ 2 * ni + 2].change(seg_data[ni].lazy);
seg_data[ni].lazy = 0;
seg_data[ni].is_lazy = false;
}
void Build(std::vector<long long> &arr, int ni, int lx, int rx) {
if(rx - lx == 1) {
if(lx < (int)arr.size())
seg_data[ni] = Node(arr[lx]);
else
seg_data[ni] = Node(inf);
return;
}
int mid = (lx + rx) / 2;
Build(arr, 2 * ni + 1, lx, mid);
Build(arr, 2 * ni + 2, mid, rx);
seg_data[ni] = merge(seg_data[2 * ni + 1], seg_data[2 * ni + 2]);
}
void Build(std::vector<long long> & arr) {
Build(arr, 0, 0, tree_size);
}
Node get(int i, int ni, int lx, int rx){
propagate(ni, lx, rx);
if(rx - lx == 1)
return seg_data[ni];
int mid = (lx + rx) / 2;
if(i < mid)
return get(i, ni*2+1, lx, mid);
else
return get(i, ni*2+2, mid, rx);
}
long long get(int i) {
return get(i, 0, 0, tree_size).val;
}
void add(int l, int r, int v, int ni, int lx, int rx) {
propagate(ni, lx, rx);
if(lx >= l && rx <= r) {
seg_data[ni].change(v);
return;
}
if(rx <= l || lx >= r)
return;
int mid = (lx + rx) / 2;
add(l, r, v, 2 * ni + 1, lx, mid);
add(l, r, v, 2 * ni + 2, mid, rx);
seg_data[ni] = merge(seg_data[2 * ni + 1], seg_data[2*ni + 2]);
}
void add(int l, int r, int v) {
add(l, r, v, 0, 0, tree_size);
}
int upper_bound(long long x, int ni, int lx, int rx){
propagate(ni, lx, rx);
if(rx-lx==1)
return (seg_data[ni].val>x?lx:rx);
int mid = (lx+rx)/2;
if(seg_data[ni*2+1].val > x)
return upper_bound(x, ni*2+1, lx, mid);
else
return upper_bound(x, ni*2+2, mid, rx);
}
int upper_bound(long long x){
return upper_bound(x, 0, 0, tree_size);
}
};
struct Query{
int op, a, b;
long long x, p;
};
int main() {
std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr);
int n, q;
std::cin >> n >> q;
Query b[n+q];
for(int i=0; i<n; ++i)
std::cin >> b[i].p >> b[i].a >> b[i].b, b[i].op = 1;
std::vector<long long> numbers;
std::map<long long, int> flatten;
for(int j=n; j-n<q; ++j){
std::cin >> b[j].op;
if(b[j].op == 1)
std::cin >> b[j].p >> b[j].a >> b[j].b;
else {
std::cin >> b[j].x;
numbers.push_back(b[j].x);
}
}
std::sort(numbers.begin(), numbers.end());
numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end());
int m = numbers.size();
for(int c=0; c<m; ++c)
flatten[numbers[c]] = c;
SegmentTree st(m);
st.Build(numbers);
for(int j=0; j<q+n; ++j) {
if(b[j].op == 1){
int l = st.upper_bound(b[j].p);
st.add(0, l, -b[j].b);
st.add(l, m, b[j].a);
}
else{
std::cout << st.get(flatten[b[j].x]) << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CmNvbnN0IGxvbmcgbG9uZyBpbmYgPSAxZTE3OwpzdHJ1Y3QgU2VnbWVudFRyZWUgewogICAgc3RydWN0IE5vZGUgewogICAgICAgIGxvbmcgbG9uZyB2YWw7CiAgICAgICAgbG9uZyBsb25nIGxhenk7CiAgICAgICAgYm9vbCBpc19sYXp5OwogICAgICAgIGV4cGxpY2l0IE5vZGUobG9uZyBsb25nIHggPSAtaW5mKSB7CiAgICAgICAgICAgIHZhbCA9IHg7CiAgICAgICAgICAgIGxhenkgPSAwOwogICAgICAgICAgICBpc19sYXp5ID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZvaWQgY2hhbmdlKGxvbmcgbG9uZyB4KSB7CiAgICAgICAgICAgIHZhbCArPSB4OwogICAgICAgICAgICBsYXp5ICs9IHg7CiAgICAgICAgICAgIGlzX2xhenkgPSB0cnVlOwogICAgICAgIH0KICAgIH07CiAgICBpbnQgdHJlZV9zaXplOwogICAgc3RkOjp2ZWN0b3I8Tm9kZT4gc2VnX2RhdGE7CgogICAgZXhwbGljaXQgU2VnbWVudFRyZWUoaW50IG4pIHsKICAgICAgICB0cmVlX3NpemUgPSAxOwogICAgICAgIHdoaWxlICh0cmVlX3NpemUgPCBuKSB0cmVlX3NpemUgKj0gMjsKICAgICAgICBzZWdfZGF0YS5hc3NpZ24oMiAqIHRyZWVfc2l6ZSwgTm9kZSgpKTsKICAgIH0KCiAgICBzdGF0aWMgTm9kZSBtZXJnZShjb25zdCBOb2RlICZsZiwgY29uc3QgTm9kZSAmIHJpKSB7CiAgICAgICAgTm9kZSBhbnMgPSBOb2RlKCk7CiAgICAgICAgYW5zLnZhbCA9IHN0ZDo6bWF4KGxmLnZhbCwgcmkudmFsKTsKICAgICAgICByZXR1cm4gYW5zOwogICAgfQoKICAgIHZvaWQgcHJvcGFnYXRlKGludCBuaSwgaW50IGx4LCBpbnQgcngpIHsKICAgICAgICBpZighc2VnX2RhdGFbbmldLmlzX2xhenkgfHwgcnggLSBseCA9PSAxKSByZXR1cm47CgogICAgICAgIHNlZ19kYXRhWyAyICogbmkgKyAxXS5jaGFuZ2Uoc2VnX2RhdGFbbmldLmxhenkpOwogICAgICAgIHNlZ19kYXRhWyAyICogbmkgKyAyXS5jaGFuZ2Uoc2VnX2RhdGFbbmldLmxhenkpOwoKICAgICAgICBzZWdfZGF0YVtuaV0ubGF6eSA9IDA7CiAgICAgICAgc2VnX2RhdGFbbmldLmlzX2xhenkgPSBmYWxzZTsKICAgIH0KCiAgICB2b2lkIEJ1aWxkKHN0ZDo6dmVjdG9yPGxvbmcgbG9uZz4gJmFyciwgaW50IG5pLCBpbnQgbHgsIGludCByeCkgewogICAgICAgIGlmKHJ4IC0gbHggPT0gMSkgewogICAgICAgICAgICBpZihseCA8IChpbnQpYXJyLnNpemUoKSkKICAgICAgICAgICAgICAgIHNlZ19kYXRhW25pXSA9IE5vZGUoYXJyW2x4XSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHNlZ19kYXRhW25pXSA9IE5vZGUoaW5mKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpbnQgbWlkID0gKGx4ICsgcngpIC8gMjsKICAgICAgICBCdWlsZChhcnIsIDIgKiBuaSArIDEsIGx4LCBtaWQpOwogICAgICAgIEJ1aWxkKGFyciwgMiAqIG5pICsgMiwgbWlkLCByeCk7CgogICAgICAgIHNlZ19kYXRhW25pXSA9IG1lcmdlKHNlZ19kYXRhWzIgKiBuaSArIDFdLCBzZWdfZGF0YVsyICogbmkgKyAyXSk7CiAgICB9CiAgICB2b2lkIEJ1aWxkKHN0ZDo6dmVjdG9yPGxvbmcgbG9uZz4gJiBhcnIpIHsKICAgICAgICBCdWlsZChhcnIsIDAsIDAsIHRyZWVfc2l6ZSk7CiAgICB9CgogICAgTm9kZSBnZXQoaW50IGksIGludCBuaSwgaW50IGx4LCBpbnQgcngpewogICAgICAgIHByb3BhZ2F0ZShuaSwgbHgsIHJ4KTsKICAgICAgICBpZihyeCAtIGx4ID09IDEpCiAgICAgICAgICAgIHJldHVybiBzZWdfZGF0YVtuaV07CgogICAgICAgIGludCBtaWQgPSAobHggKyByeCkgLyAyOwogICAgICAgIGlmKGkgPCBtaWQpCiAgICAgICAgICAgIHJldHVybiBnZXQoaSwgbmkqMisxLCBseCwgbWlkKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBnZXQoaSwgbmkqMisyLCBtaWQsIHJ4KTsKICAgIH0KICAgIGxvbmcgbG9uZyBnZXQoaW50IGkpIHsKICAgICAgICByZXR1cm4gZ2V0KGksIDAsIDAsIHRyZWVfc2l6ZSkudmFsOwogICAgfQoKCiAgICB2b2lkIGFkZChpbnQgbCwgaW50IHIsIGludCB2LCBpbnQgbmksIGludCBseCwgaW50IHJ4KSB7CiAgICAgICAgcHJvcGFnYXRlKG5pLCBseCwgcngpOwoKICAgICAgICBpZihseCA+PSBsICYmIHJ4IDw9IHIpIHsKICAgICAgICAgICAgc2VnX2RhdGFbbmldLmNoYW5nZSh2KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZihyeCA8PSBsIHx8IGx4ID49IHIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaW50IG1pZCA9IChseCArIHJ4KSAvIDI7CiAgICAgICAgYWRkKGwsIHIsIHYsIDIgKiBuaSArIDEsIGx4LCBtaWQpOwogICAgICAgIGFkZChsLCByLCB2LCAyICogbmkgKyAyLCBtaWQsIHJ4KTsKCiAgICAgICAgc2VnX2RhdGFbbmldID0gbWVyZ2Uoc2VnX2RhdGFbMiAqIG5pICsgMV0sIHNlZ19kYXRhWzIqbmkgKyAyXSk7CiAgICB9CgogICAgdm9pZCBhZGQoaW50IGwsIGludCByLCBpbnQgdikgewogICAgICAgIGFkZChsLCByLCB2LCAwLCAwLCB0cmVlX3NpemUpOwogICAgfQoKICAgIGludCB1cHBlcl9ib3VuZChsb25nIGxvbmcgeCwgaW50IG5pLCBpbnQgbHgsIGludCByeCl7CiAgICAgICAgcHJvcGFnYXRlKG5pLCBseCwgcngpOwoKICAgICAgICBpZihyeC1seD09MSkKICAgICAgICAgICAgcmV0dXJuIChzZWdfZGF0YVtuaV0udmFsPng/bHg6cngpOwoKICAgICAgICBpbnQgbWlkID0gKGx4K3J4KS8yOwogICAgICAgIGlmKHNlZ19kYXRhW25pKjIrMV0udmFsID4geCkKICAgICAgICAgICAgcmV0dXJuIHVwcGVyX2JvdW5kKHgsIG5pKjIrMSwgbHgsIG1pZCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gdXBwZXJfYm91bmQoeCwgbmkqMisyLCBtaWQsIHJ4KTsKICAgIH0KCiAgICBpbnQgdXBwZXJfYm91bmQobG9uZyBsb25nIHgpewogICAgICAgIHJldHVybiB1cHBlcl9ib3VuZCh4LCAwLCAwLCB0cmVlX3NpemUpOwogICAgfQp9OwpzdHJ1Y3QgUXVlcnl7CiAgICBpbnQgb3AsIGEsIGI7CiAgICBsb25nIGxvbmcgeCwgcDsKfTsKaW50IG1haW4oKSB7CiAgICBzdGQ6Omlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBzdGQ6OmNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgbiwgcTsKICAgIHN0ZDo6Y2luID4+IG4gPj4gcTsKICAgIFF1ZXJ5IGJbbitxXTsKICAgIGZvcihpbnQgaT0wOyBpPG47ICsraSkKICAgICAgICBzdGQ6OmNpbiA+PiBiW2ldLnAgPj4gYltpXS5hID4+IGJbaV0uYiwgYltpXS5vcCA9IDE7CiAgICBzdGQ6OnZlY3Rvcjxsb25nIGxvbmc+IG51bWJlcnM7CiAgICBzdGQ6Om1hcDxsb25nIGxvbmcsIGludD4gZmxhdHRlbjsKICAgIGZvcihpbnQgaj1uOyBqLW48cTsgKytqKXsKICAgICAgICBzdGQ6OmNpbiA+PiBiW2pdLm9wOwogICAgICAgIGlmKGJbal0ub3AgPT0gMSkKICAgICAgICAgICAgc3RkOjpjaW4gPj4gYltqXS5wID4+IGJbal0uYSA+PiBiW2pdLmI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHN0ZDo6Y2luID4+IGJbal0ueDsKICAgICAgICAgICAgbnVtYmVycy5wdXNoX2JhY2soYltqXS54KTsKICAgICAgICB9CiAgICB9CiAgICBzdGQ6OnNvcnQobnVtYmVycy5iZWdpbigpLCBudW1iZXJzLmVuZCgpKTsKICAgIG51bWJlcnMuZXJhc2Uoc3RkOjp1bmlxdWUobnVtYmVycy5iZWdpbigpLCBudW1iZXJzLmVuZCgpKSwgbnVtYmVycy5lbmQoKSk7CiAgICBpbnQgbSA9IG51bWJlcnMuc2l6ZSgpOwogICAgZm9yKGludCBjPTA7IGM8bTsgKytjKQogICAgICAgIGZsYXR0ZW5bbnVtYmVyc1tjXV0gPSBjOwogICAgU2VnbWVudFRyZWUgc3QobSk7CiAgICBzdC5CdWlsZChudW1iZXJzKTsKICAgIGZvcihpbnQgaj0wOyBqPHErbjsgKytqKSB7CiAgICAgICAgaWYoYltqXS5vcCA9PSAxKXsKICAgICAgICAgICAgaW50IGwgPSBzdC51cHBlcl9ib3VuZChiW2pdLnApOwogICAgICAgICAgICBzdC5hZGQoMCwgbCwgLWJbal0uYik7CiAgICAgICAgICAgIHN0LmFkZChsLCBtLCBiW2pdLmEpOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgc3QuZ2V0KGZsYXR0ZW5bYltqXS54XSkgPDwgJ1xuJzsKICAgICAgICB9CiAgICB9Cn0=