#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+1;
int n,m,a[N],sum,ch[N][2],b[N],rt[N],v,op,loc,val;
int clone(int u){
ch[++sum][0]=ch[u][0];
ch[sum][1]=ch[u][1];
b[sum]=b[u];
return sum;
}
int build(int u,int l,int r){
u=++sum;
if(l==r){
b[u]=a[l];
return u;
}
int mid=(l+r)/2;
ch[u][0]=build(0,l,mid);
ch[u][1]=build(0,mid+1,r);
return u;
}
int cov(int u,int l,int r,int x,int k){
u=clone(u);
if(x==l&&r==x){
b[u]=a[l];
return u;
}
int mid=(l+r)/2;
if(x<=mid) ch[u][0]=cov(0,l,mid,x,k);
else ch[u][1]=cov(0,mid+1,r,x,k);
return u;
}
int query(int u,int l,int r,int x){
if(x==l&&r==x) return b[u];
int mid=(l+r)/2;
if(x<=mid) return query(0,l,mid,x);
else return query(0,mid+1,r,x);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
rt[0]=build(0,1,n);
for(int i=1;i<=m;i++){
cin>>v>>op>>loc;
if(op==1){
cin>>val;
rt[i]=cov(rt[v],1,n,loc,val);
}
else{
cout<<query(rt[v],1,n,loc)<<endl;
rt[i]=rt[v];
}
}
}