#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
int n, q;
int x[N];
ll pref[N];
ll seg[4 * N], lazy[4 * N];
void build(int id, int l, int r) {
if (l == r) {
seg[id] = pref[l];
return;
}
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
seg[id] = max(seg[id * 2], seg[id * 2 + 1]);
}
void push(int id) {
if (lazy[id]) {
seg[id * 2] += lazy[id];
lazy[id * 2] += lazy[id];
seg[id * 2 + 1] += lazy[id];
lazy[id * 2 + 1] += lazy[id];
lazy[id] = 0;
}
}
void update(int id, int l, int r, int u, int v, ll val) {
if (l > v || r < u) return;
if (u <= l && r <= v) {
seg[id] += val;
lazy[id] += val;
return;
}
push(id);
int mid = (l + r) >> 1;
update(id * 2, l, mid, u, v, val);
update(id * 2 + 1, mid + 1, r, u, v, val);
seg[id] = max(seg[id * 2], seg[id * 2 + 1]);
}
ll getMax(int id, int l, int r, int u, int v) {
if (l > v || r < u) return -LINF;
if (u <= l && r <= v) return seg[id];
push(id);
int mid = (l + r) >> 1;
return max(getMax(id * 2, l, mid, u, v), getMax(id * 2 + 1, mid + 1, r, u, v));
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> x[i];
pref[i] = pref[i - 1] + x[i];
}
build(1, 0, n);
while (q--) {
int type; cin >> type;
if (type == 1) {
int pos, val;
cin >> pos >> val;
update(1, 0, n, pos, n, val - x[pos]);
x[pos] = val;
}
else {
int l, r;
cin >> l >> r;
ll C = getMax(1, 0, n, l - 1, l - 1); // pref[l - 1]
ll ans = max(getMax(1, 0, n, l, r) - C, 0ll);
cout << ans << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDJlNSArIDU7IAoKaW50IG4sIHE7ICAKaW50IHhbTl07IApsbCBwcmVmW05dOyAKCmxsIHNlZ1s0ICogTl0sIGxhenlbNCAqIE5dOyAKCnZvaWQgYnVpbGQoaW50IGlkLCBpbnQgbCwgaW50IHIpIHsKCWlmIChsID09IHIpIHsKCQlzZWdbaWRdID0gcHJlZltsXTsgCgkJcmV0dXJuOyAKCX0KCglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCWJ1aWxkKGlkICogMiwgbCwgbWlkKTsgCglidWlsZChpZCAqIDIgKyAxLCBtaWQgKyAxLCByKTsgCgoJc2VnW2lkXSA9IG1heChzZWdbaWQgKiAyXSwgc2VnW2lkICogMiArIDFdKTsgCn0KCnZvaWQgcHVzaChpbnQgaWQpIHsKCWlmIChsYXp5W2lkXSkgewoJCXNlZ1tpZCAqIDJdICs9IGxhenlbaWRdOyAKCQlsYXp5W2lkICogMl0gKz0gbGF6eVtpZF07IAoKCQlzZWdbaWQgKiAyICsgMV0gKz0gbGF6eVtpZF07IAoJCWxhenlbaWQgKiAyICsgMV0gKz0gbGF6eVtpZF07IAoKCQlsYXp5W2lkXSA9IDA7IAkKCX0KfQoKdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdiwgbGwgdmFsKSB7CglpZiAobCA+IHYgfHwgciA8IHUpIHJldHVybjsgCgoJaWYgKHUgPD0gbCAmJiByIDw9IHYpIHsKCQlzZWdbaWRdICs9IHZhbDsgCgkJbGF6eVtpZF0gKz0gdmFsOyAKCQlyZXR1cm47IAoJfQoKCXB1c2goaWQpOyAKCglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCXVwZGF0ZShpZCAqIDIsIGwsIG1pZCwgdSwgdiwgdmFsKTsgCgl1cGRhdGUoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgdSwgdiwgdmFsKTsgCgoJc2VnW2lkXSA9IG1heChzZWdbaWQgKiAyXSwgc2VnW2lkICogMiArIDFdKTsgCn0KCmxsIGdldE1heChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KSB7CglpZiAobCA+IHYgfHwgciA8IHUpIHJldHVybiAtTElORjsgICAKCglpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHNlZ1tpZF07IAoKCXB1c2goaWQpOyAgCgoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCglyZXR1cm4gbWF4KGdldE1heChpZCAqIDIsIGwsIG1pZCwgdSwgdiksIGdldE1heChpZCAqIDIgKyAxLCBtaWQgKyAxLCByLCB1LCB2KSk7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gcTsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQljaW4gPj4geFtpXTsgCgkJcHJlZltpXSA9IHByZWZbaSAtIDFdICsgeFtpXTsgCgl9CgoJYnVpbGQoMSwgMCwgbik7IAoKCXdoaWxlIChxLS0pIHsKCQlpbnQgdHlwZTsgY2luID4+IHR5cGU7IAoKCQlpZiAodHlwZSA9PSAxKSB7CgkJCWludCBwb3MsIHZhbDsgCgkJCWNpbiA+PiBwb3MgPj4gdmFsOyAgIAoJCQl1cGRhdGUoMSwgMCwgbiwgcG9zLCBuLCB2YWwgLSB4W3Bvc10pOyAKCQkJeFtwb3NdID0gdmFsOyAKCQl9CgkJZWxzZSB7CgkJCWludCBsLCByOyAKCQkJY2luID4+IGwgPj4gcjsgCgkJCWxsIEMgPSBnZXRNYXgoMSwgMCwgbiwgbCAtIDEsIGwgLSAxKTsgLy8gcHJlZltsIC0gMV0KCQkJbGwgYW5zID0gbWF4KGdldE1heCgxLCAwLCBuLCBsLCByKSAtIEMsIDBsbCk7CgkJCWNvdXQgPDwgYW5zIDw8ICdcbic7ICAKCQl9Cgl9Cn0=