#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
const int LG = 30;
int n, q;
int a[MAXN];
int H[MAXN * LG];
long long st[MAXN * LG];
int L[MAXN * LG], R[MAXN * LG];
int node = 0;
int up(int old, int l, int r, int pos, int val){
int cur = ++ node;
if(l == r){
st[cur] = val;
return cur;
}
int mid = l + r >> 1;
if(pos <= mid){
R[cur] = R[old];
L[cur] = up(L[old], l, mid, pos, val);
} else{
L[cur] = L[old];
R[cur] = up(R[old], mid + 1, r, pos, val);
}
st[cur] = st[L[cur]] + st[R[cur]];
return cur;
}
long long get(int id, int l, int r, int u, int v){
if(l > v || r < u) return 0;
if(l >= u && r <= v) return st[id];
int mid = l + r >> 1;
return get(L[id], l, mid, u, v) + get(R[id], mid + 1, r, u, v);
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++){
H[1] = up(H[1], 1, n, i, a[i]);
}
int vers = 1;
while(q--){
int t; cin >> t;
if(t == 1){
int id, val, x; cin >> x >> id >> val;
H[x] = up(H[x], 1, n, id, val);
}
if(t == 2){
int k, l, r; cin >> k >> l >> r;
cout << get(H[k], 1, n, l, r) << "\n";
}
if(t == 3){
int k; cin >> k;
H[vers + 1] = H[k];
vers++;
}
}
return 0;
}
/*
5 6
2 3 1 2 5
3 1
2 1 1 5
2 2 1 5
1 2 2 5
2 1 1 5
2 2 1 5
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNQVhOID0gMmU1ICsgNTsKY29uc3QgaW50IExHID0gMzA7CmludCBuLCBxOwppbnQgYVtNQVhOXTsKCmludCBIW01BWE4gKiBMR107CmxvbmcgbG9uZyBzdFtNQVhOICogTEddOwppbnQgTFtNQVhOICogTEddLCBSW01BWE4gKiBMR107CmludCBub2RlID0gMDsKCmludCB1cChpbnQgb2xkLCBpbnQgbCwgaW50IHIsIGludCBwb3MsIGludCB2YWwpewogICAgaW50IGN1ciA9ICsrIG5vZGU7CiAgICBpZihsID09IHIpewogICAgICAgIHN0W2N1cl0gPSB2YWw7CiAgICAgICAgcmV0dXJuIGN1cjsKICAgIH0KICAgIGludCBtaWQgPSBsICsgciA+PiAxOwogICAgaWYocG9zIDw9IG1pZCl7CiAgICAgICAgUltjdXJdID0gUltvbGRdOwogICAgICAgIExbY3VyXSA9IHVwKExbb2xkXSwgbCwgbWlkLCBwb3MsIHZhbCk7CiAgICB9IGVsc2V7CiAgICAgICAgTFtjdXJdID0gTFtvbGRdOwogICAgICAgIFJbY3VyXSA9IHVwKFJbb2xkXSwgbWlkICsgMSwgciwgcG9zLCB2YWwpOwogICAgfQogICAgc3RbY3VyXSA9IHN0W0xbY3VyXV0gKyBzdFtSW2N1cl1dOwogICAgcmV0dXJuIGN1cjsKfQoKbG9uZyBsb25nIGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KXsKICAgIGlmKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gMDsKICAgIGlmKGwgPj0gdSAmJiByIDw9IHYpIHJldHVybiBzdFtpZF07CiAgICBpbnQgbWlkID0gbCArIHIgPj4gMTsKICAgIHJldHVybiBnZXQoTFtpZF0sIGwsIG1pZCwgdSwgdikgKyBnZXQoUltpZF0sIG1pZCArIDEsIHIsIHUsIHYpOwp9CgpzaWduZWQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIEhbMV0gPSB1cChIWzFdLCAxLCBuLCBpLCBhW2ldKTsKICAgIH0KICAgIGludCB2ZXJzID0gMTsKCiAgICB3aGlsZShxLS0pewogICAgICAgIGludCB0OyBjaW4gPj4gdDsKICAgICAgICBpZih0ID09IDEpewogICAgICAgICAgICBpbnQgaWQsIHZhbCwgeDsgY2luID4+IHggPj4gaWQgPj4gdmFsOwogICAgICAgICAgICBIW3hdID0gdXAoSFt4XSwgMSwgbiwgaWQsIHZhbCk7CiAgICAgICAgfQogICAgICAgIGlmKHQgPT0gMil7CiAgICAgICAgICAgIGludCBrLCBsLCByOyBjaW4gPj4gayA+PiBsID4+IHI7CiAgICAgICAgICAgIGNvdXQgPDwgZ2V0KEhba10sIDEsIG4sIGwsIHIpIDw8ICJcbiI7CiAgICAgICAgfQogICAgICAgIGlmKHQgPT0gMyl7CiAgICAgICAgICAgIGludCBrOyBjaW4gPj4gazsKICAgICAgICAgICAgSFt2ZXJzICsgMV0gPSBIW2tdOwogICAgICAgICAgICB2ZXJzKys7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Ci8qCjUgNgoyIDMgMSAyIDUKMyAxCjIgMSAxIDUKMiAyIDEgNQoxIDIgMiA1CjIgMSAxIDUKMiAyIDEgNQoqLwo=