#include<bits/stdc++.h>
using namespace std;
const long long maxn=10000010;
long long tp,n,m,a[maxn],ro[maxn];
struct acdb{
long long l,r,v;
}tr[maxn];
long long cl(long long no){
tp++;
tr[tp]=tr[no];
return tp;
}
long long mtr(long long no,long long be,long long ed){
no=++tp;
if(be==ed){
tr[no].v=a[be];
return tp;
}
long long mid=(be+ed)>>1;
tr[no].l=mtr(tr[no].l,be,mid);
tr[no].r=mtr(tr[no].r,mid+1,ed);
return no;
}
long long ud(long long no,long long be,long long ed,long long x,long long v){
no=cl(no);
if(be==ed){
tr[no].v=v;
}
else{
long long mid=(be+ed)>>1;
if(x<=mid){
tr[no].l=ud(tr[no].l,be,mid,x,v);
}
else{
tr[no].r=ud(tr[no].r,mid+1,ed,x,v);
}
}
return no;
}
long long qy(long long no,long long be,long long ed,long long x){
if(be==ed){
return tr[no].v;
}
else{
long long mid=(be+ed)>>1;
if(x<=mid){
return qy(tr[no].l,be,mid,x);
}
else{
return qy(tr[no].r,mid+1,ed,x);
}
}
}
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
ro[0]=mtr(0,1,n);
for(long long i=1;i<=m;i++){
long long rt,mo,x,y;
cin>>rt>>mo>>x;
if(mo==1){
cin>>y;
ro[i]=ud(ro[rt],1,n,x,y);
}
else{
cout<<qy(ro[rt],1,n,x)<<endl;
ro[i]=ro[rt];
}
}
return 0;
}
80分,不知道哪里挂了