#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 a[N];
vector<int> root;
struct PersistentSegTree {
struct Node {
int l = 0, r = 0;
ll sum = 0;
};
int n;
vector<Node> seg;
PersistentSegTree(int n) : n(n) {
seg.reserve(22 * n);
}
int build(int l, int r, int a[]) {
int cur = seg.size();
seg.push_back(Node());
if (l == r) {
seg[cur].sum = a[l];
return cur;
}
int mid = (l + r) >> 1;
seg[cur].l = build(l, mid, a);
seg[cur].r = build(mid + 1, r, a);
int lc = seg[cur].l, rc = seg[cur].r;
seg[cur].sum = seg[lc].sum + seg[rc].sum;
return cur;
}
int update(int pre, int l, int r, int pos, int val) {
int cur = seg.size();
seg.push_back(seg[pre]);
if (l == r) {
seg[cur].sum = val;
return cur;
}
int mid = (l + r) >> 1;
if (pos <= mid) {
seg[cur].l = update(seg[pre].l, l, mid, pos, val);
}
else {
seg[cur].r = update(seg[pre].r, mid + 1, r, pos, val);
}
int lc = seg[cur].l, rc = seg[cur].r;
seg[cur].sum = seg[lc].sum + seg[rc].sum;
return cur;
}
ll getSum(int rt, int l, int r, int u, int v) {
if (l > v || r < u) return 0;
if (u <= l && r <= v) return seg[rt].sum;
int mid = (l + r) >> 1;
return getSum(seg[rt].l, l, mid, u, v) + getSum(seg[rt].r, mid + 1, r, u, v);
}
int build(int a[]) {
return build(1, n, a);
}
int update(int pre, int pos, int val) {
return update(pre, 1, n, pos, val);
}
ll getSum(int rt, int u, int v) {
return getSum(rt, 1, n, u, v);
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
PersistentSegTree pst(n);
root.push_back(pst.build(a));
while (q--) {
int type, k;
cin >> type >> k;
--k;
if (type == 1) {
int pos, val;
cin >> pos >> val;
root[k] = pst.update(root[k], pos, val);
}
else if (type == 2) {
int l, r;
cin >> l >> r;
cout << pst.getSum(root[k], l, r) << '\n';
}
else {
root.push_back(root[k]);
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAyZTUgKyA1OyAKCmludCBuLCBxOyAgCmludCBhW05dOyAKCnZlY3RvcjxpbnQ+IHJvb3Q7ICAKCnN0cnVjdCBQZXJzaXN0ZW50U2VnVHJlZSB7CglzdHJ1Y3QgTm9kZSB7CgkJaW50IGwgPSAwLCByID0gMDsgIAoJCWxsIHN1bSA9IDA7ICAKCX07CgoJaW50IG47ICAKCXZlY3RvcjxOb2RlPiBzZWc7ICAKCglQZXJzaXN0ZW50U2VnVHJlZShpbnQgbikgOiBuKG4pIHsKCQlzZWcucmVzZXJ2ZSgyMiAqIG4pOwoJfQoKCWludCBidWlsZChpbnQgbCwgaW50IHIsIGludCBhW10pIHsKCQlpbnQgY3VyID0gc2VnLnNpemUoKTsgIAoJCXNlZy5wdXNoX2JhY2soTm9kZSgpKTsgCgkJaWYgKGwgPT0gcikgewoJCQlzZWdbY3VyXS5zdW0gPSBhW2xdOyAKCQkJcmV0dXJuIGN1cjsgCgkJfQoJCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoJCXNlZ1tjdXJdLmwgPSBidWlsZChsLCBtaWQsIGEpOyAKCQlzZWdbY3VyXS5yID0gYnVpbGQobWlkICsgMSwgciwgYSk7IAoJCWludCBsYyA9IHNlZ1tjdXJdLmwsIHJjID0gc2VnW2N1cl0ucjsgICAKCQlzZWdbY3VyXS5zdW0gPSBzZWdbbGNdLnN1bSArIHNlZ1tyY10uc3VtOwoJCXJldHVybiBjdXI7IAoJfQoKCWludCB1cGRhdGUoaW50IHByZSwgaW50IGwsIGludCByLCBpbnQgcG9zLCBpbnQgdmFsKSB7CgkJaW50IGN1ciA9IHNlZy5zaXplKCk7ICAKCQlzZWcucHVzaF9iYWNrKHNlZ1twcmVdKTsgCgkJaWYgKGwgPT0gcikgewoJCQlzZWdbY3VyXS5zdW0gPSB2YWw7ICAKCQkJcmV0dXJuIGN1cjsgCgkJfQoJCWludCBtaWQgPSAobCArIHIpID4+IDE7ICAKCQlpZiAocG9zIDw9IG1pZCkgewoJCQlzZWdbY3VyXS5sID0gdXBkYXRlKHNlZ1twcmVdLmwsIGwsIG1pZCwgcG9zLCB2YWwpOyAgCgkJfQoJCWVsc2UgewoJCQlzZWdbY3VyXS5yID0gdXBkYXRlKHNlZ1twcmVdLnIsIG1pZCArIDEsIHIsIHBvcywgdmFsKTsgCgkJfQoJCWludCBsYyA9IHNlZ1tjdXJdLmwsIHJjID0gc2VnW2N1cl0ucjsgIAoJCXNlZ1tjdXJdLnN1bSA9IHNlZ1tsY10uc3VtICsgc2VnW3JjXS5zdW07IAoJCXJldHVybiBjdXI7IAoJfQoKCWxsIGdldFN1bShpbnQgcnQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KSB7CgkJaWYgKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gMDsgIAoJCWlmICh1IDw9IGwgJiYgciA8PSB2KSByZXR1cm4gc2VnW3J0XS5zdW07ICAKCQlpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCQlyZXR1cm4gZ2V0U3VtKHNlZ1tydF0ubCwgbCwgbWlkLCB1LCB2KSArIGdldFN1bShzZWdbcnRdLnIsIG1pZCArIDEsIHIsIHUsIHYpOwoJfQoKCWludCBidWlsZChpbnQgYVtdKSB7CgkJcmV0dXJuIGJ1aWxkKDEsIG4sIGEpOwoJfQoKCWludCB1cGRhdGUoaW50IHByZSwgaW50IHBvcywgaW50IHZhbCkgewoJCXJldHVybiB1cGRhdGUocHJlLCAxLCBuLCBwb3MsIHZhbCk7Cgl9CgoJbGwgZ2V0U3VtKGludCBydCwgaW50IHUsIGludCB2KSB7CgkJcmV0dXJuIGdldFN1bShydCwgMSwgbiwgdSwgdik7IAoJfQp9OyAKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IHE7IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXTsgIAoKCVBlcnNpc3RlbnRTZWdUcmVlIHBzdChuKTsgIAoJcm9vdC5wdXNoX2JhY2socHN0LmJ1aWxkKGEpKTsgIAoKCXdoaWxlIChxLS0pIHsKCQlpbnQgdHlwZSwgazsgCgkJY2luID4+IHR5cGUgPj4gazsgIAoJCS0tazsgICAKCQlpZiAodHlwZSA9PSAxKSB7CgkJCWludCBwb3MsIHZhbDsgCgkJCWNpbiA+PiBwb3MgPj4gdmFsOyAgCgkJCXJvb3Rba10gPSBwc3QudXBkYXRlKHJvb3Rba10sIHBvcywgdmFsKTsgCgkJfQoJCWVsc2UgaWYgKHR5cGUgPT0gMikgewoJCQlpbnQgbCwgcjsgCgkJCWNpbiA+PiBsID4+IHI7IAoJCQljb3V0IDw8IHBzdC5nZXRTdW0ocm9vdFtrXSwgbCwgcikgPDwgJ1xuJzsgCgkJfQoJCWVsc2UgewoJCQlyb290LnB1c2hfYmFjayhyb290W2tdKTsKCQl9Cgl9Cn0=