#include<bits/stdc++.h>
#define px first
#define py second
#define mkp make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ostream_iterator<ll> output(cout," ");
const int N=1000005;
//const int MOD=;
typedef pair<int,int> P;
template<typename T>
struct Node{
T sum;
int ls,rs;
Node(){sum=ls=rs=0;}
};
Node<int> tr[N<<5];
int tot=0;
template<typename T>
class Persistent_SegTree{
public:
void add(int ver,int i,const T& v){root.push_back(root[ver]),add(root.back(),1,n,i,v);}
T sum(int ver,int l,int r){return query_sum(root[ver],1,n,l,r);}
Persistent_SegTree(int si): n(si){root.push_back(++tot);}
template<typename It> Persistent_SegTree(It beg,It ed):
n(distance(beg,ed)){root.push_back(0),build(root[0],1,n,beg-1);}
int copy_version(){root.push_back(root.back());return root.size()-1;}
template<typename It>void insert_value(It beg,It ed){
for(;beg!=ed;++beg) add(root[copy_version()],1,n,*beg,1);
}
//ÒÔÏÂΪ·Ç±ØÒªÄÚÈÝ
int copy_version(int ver){root.push_back(root[ver]);return root.size()-1;}
int last_version() const{return root.size()-1;}
void del_version(){root.pop_back();}
void del_version(int ver){root.erase(root.begin()+ver);}
/*void print(){
fprintf(stderr,"root:");for(int i:root) fprintf(stderr,"%d ",i);fprintf(stderr,"\n");
}*/
private:
int n;
int flag=false;
vector<int> root;
template<typename It>
void build(int &i,int l,int r,const It& bg){
i=++tot;
if(l==r) tr[i].sum=*(bg+l);
else{
int mid=(l+r)>>1;
build(tr[i].ls,l,mid,bg);
build(tr[i].rs,mid+1,r,bg);
tr[i].sum=tr[tr[i].ls].sum+tr[tr[i].rs].sum;
}
}
void add(int& i,const int& nl,const int& nr,const int& x,const T& v){
tr[++tot]=tr[i];
i=tot;
//cerr<<i<<": "<<nl<<" "<<nr<<endl;
if(nl==nr) return void(tr[i].sum=v);
int mid=(nl+nr)>>1;
if(mid>=x) add(tr[i].ls,nl,mid,x,v);
else add(tr[i].rs,mid+1,nr,x,v);
tr[i].sum=tr[tr[i].ls].sum+tr[tr[i].rs].sum;
}
T query_sum(int i,const int& nl,const int& nr,const int& l,const int& r){
if(nl>=l&&nr<=r) return tr[i].sum;
int mid=(nl+nr)>>1;
T ans=0;
if(mid>=l&&tr[i].ls) ans+=query_sum(tr[i].ls,nl,mid,l,r);
if(mid<r&&tr[i].rs) ans+=query_sum(tr[i].rs,mid+1,nr,l,r);
return ans;
}
};
int n,m,a[N];
signed main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
Persistent_SegTree<int> x(a+1,a+n+1);
//for(int i=1;i<=tot;i++) fprintf(stderr,"tr[%d]={%d,%d,%d}\n",i,tr[i].ls,tr[i].rs,tr[i].sum);
//x.print();
for(int i=1,op,v,loc,val;i<=m;i++){
scanf("%d%d%d",&v,&op,&loc);
if(op==1) scanf("%d",&val),x.add(v,loc,val);
if(op==2) x.copy_version(),printf("%d\n",x.sum(v,loc,loc));
}
//cerr<<tr[0].ls<<" "<<tr[0].rs<<" "<<tr[0].sum<<endl;
return 0;
}
码风诡异勿喷