#include <iostream>
using namespace std;
#define int long long
int n, st[400400], m, q;
void update(int id, int l, int r, int u, int v, int val) {
if (v < l || r < u) return;
if (u <= l && r <= v) {
st[id] += val;
return;
}
int mid = (l + r) / 2;
update(id*2, l, mid, u, v, val);
update(id*2+1, mid+1, r, u, v, val);
st[id] = max(st[id*2], st[id*2+1]);
}
int get(int id, int l, int r, int u, int v) {
if (v < l || r < u) return -999999999999;
if (u <= l && r <= v) {
return st[id];
}
int mid = (l + r) / 2;
return max(get(id*2, l, mid, u, v), get(id*2+1, mid+1, r, u, v));
}
int32_t main() {
// your code goes here
cin >> n >> m;
while (m--) {
int type;
cin >> type;
if (type == 1) {
int l, r; cin >> l >> r;
cout << get(1, 1, n, l, r) << '\n';
continue;
}
int l, r, k;
cin >> l >> r >> k;
update(1, 1, n, l, r, k);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCmludCBuLCBzdFs0MDA0MDBdLCBtLCBxOwoKdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdiwgaW50IHZhbCkgewoJCWlmICh2IDwgbCB8fCByIDwgdSkgcmV0dXJuOwoJCWlmICh1IDw9IGwgJiYgciA8PSB2KSB7CgkJCXN0W2lkXSArPSB2YWw7CgkJCXJldHVybjsKCQl9CiAKCQlpbnQgbWlkID0gKGwgKyByKSAvIDI7CgkJdXBkYXRlKGlkKjIsIGwsIG1pZCwgdSwgdiwgdmFsKTsKCQl1cGRhdGUoaWQqMisxLCBtaWQrMSwgciwgdSwgdiwgdmFsKTsKCQlzdFtpZF0gPSBtYXgoc3RbaWQqMl0sIHN0W2lkKjIrMV0pOwp9CiAKaW50IGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KSB7CgkJaWYgKHYgPCBsIHx8IHIgPCB1KSByZXR1cm4gLTk5OTk5OTk5OTk5OTsKCQlpZiAodSA8PSBsICYmIHIgPD0gdikgewoJCQlyZXR1cm4gc3RbaWRdOwoJCX0KIAoJCWludCBtaWQgPSAobCArIHIpIC8gMjsKCQlyZXR1cm4gbWF4KGdldChpZCoyLCBsLCBtaWQsIHUsIHYpLCBnZXQoaWQqMisxLCBtaWQrMSwgciwgdSwgdikpOwp9CgppbnQzMl90IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgljaW4gPj4gbiA+PiBtOwoJd2hpbGUgKG0tLSkgewoJCWludCB0eXBlOwoJCWNpbiA+PiB0eXBlOwoJCWlmICh0eXBlID09IDEpIHsKCQkJaW50IGwsIHI7IGNpbiA+PiBsID4+IHI7CgkJCWNvdXQgPDwgZ2V0KDEsIDEsIG4sIGwsIHIpIDw8ICdcbic7CgkJCWNvbnRpbnVlOwoJCX0KCQlpbnQgbCwgciwgazsKCQljaW4gPj4gbCA+PiByID4+IGs7CgkJdXBkYXRlKDEsIDEsIG4sIGwsIHIsIGspOwoJfQoJcmV0dXJuIDA7Cn0=