#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e6 +5;
long long n,q,a[MaxN],b[MaxN];
struct Segtree_lazy
{
    vector<long long> lazy;
    void init(long long n)
    {
        if(n==0) return;
        lazy.assign(4*n+1,-1);
    }
    void push_down(long long id,long long l ,long long r)
    {
        if(lazy[id]==-1) return;
        long long mid = (l+r)>>1;
        lazy[2*id]=lazy[id];
        lazy[2*id+1]=lazy[id]+(mid+1-l);
        lazy[id] = -1;
    }
    void update(long long id, long long l, long long r, long long u, long long v, long long x)
    {
        if(l>v||r<u)
        {
            return;
        }
        if(u<=l&&r<=v)
        {
            lazy[id]= x+(l-u);
            return;
        }
        long long mid = (l+r)>>1;
        push_down(id,l,r);
        update(2 * id, l, mid, u, v, x);
        update(2 * id + 1, mid + 1, r, u, v, x);
    }
    long long get(long long id, long long l, long long r, long long u)
    {
        if(l==r)
        {
            if(lazy[id]==-1)
            {
                return b[l];
            }
            else
            {
                return a[lazy[id]];
            }
        }
        long long mid = (l+r)>>1;
        push_down(id,l,r);
        if(u<=mid)
        {
            return get(2*id,l,mid,u);
        }
        else
        {
            return get(2*id+1,mid+1,r,u);
        }
    }
    void update(long long u, long long v, long long x)
    {
        update(1,1,n,u,v,x);
    }
    long long get(long long i)
    {
        return get(1,1,n,i);
    }
};
Segtree_lazy st;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> q;
    st.init(n);
    for (long long i=1; i<=n; i++) cin >> a[i];
    for (long long i=1; i<=n; i++) cin >> b[i];
    while(q--)
    {
        long long num;
        cin >> num;
        if(num==1)
        {
            long long x,y,k;
            cin >> x >> y >> k;
            st.update(y,y+k-1,x);
        }
        else
        {
            long long i;
            cin >> i;
            cout << st.get(i) << "\n";
        }
    }
}
