#include<bits/stdc++.h>
using namespace std;
template <typename T> inline void read(T &x)
{
x=0;short f=1;char c=getchar();
for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
x*=f;return;
}
const int N=5e5+5;
using PII=pair<int,int>;
#define x first
#define y second
vector<int>g[N];
int dep[N],mp[N],col[N],dfn[N];
int st[N][25],idx;
void dfs(int u)
{
dfn[u]=++idx,st[idx][0]=u;
for(int v:g[u]) dep[v]=dep[u]+1,dfs(v),st[++idx][0]=u;
}
int lg[N];
int chk(int x,int y){return dep[x]<dep[y]?x:y;}
int lca(int x,int y)
{
if(x>y) swap(x,y);
int k=lg[y-x+1];
return chk(st[x][k],st[y-(1<<k)+1][k]);
}
int dis(int x,int y)
{
int l=lca(dfn[x],dfn[y]);
return dep[x]+dep[y]-2*dep[l];
}
struct node{
int l,r;
PII p;
}tr[N*4];
bool chk_in(PII a,int x){return dis(a.x,a.y)==dis(a.x,x)+dis(a.y,x);}
PII merge(PII a,PII b)
{
if(a.x<0||b.x<0) return {-1,-1};
if(chk_in(a,b.x)&&chk_in(a,b.y)) return a;
if(chk_in(b,a.x)&&chk_in(b,a.y)) return b;
if(chk_in({a.x,b.x},a.y)&&chk_in({a.x,b.x},b.y)) return {a.x,b.x};
if(chk_in({a.x,b.y},a.y)&&chk_in({a.x,b.y},b.x)) return {a.x,b.y};
if(chk_in({a.y,b.x},a.x)&&chk_in({a.y,b.x},b.y)) return {a.y,b.x};
if(chk_in({a.y,b.y},a.x)&&chk_in({a.y,b.y},b.x)) return {a.y,b.y};
return {-1,-1};
}
void pushup(int u){tr[u].p=merge(tr[u<<1].p,tr[u<<1|1].p);}
void build(int u,int l,int r)
{
tr[u].l=l,tr[u].r=r;
if(l==r) return tr[u].p={mp[l],mp[l]},void();
int mid=l+r>>1;
build(u<<1,l,mid),build(u<<1|1,mid+1,r);
pushup(u);
}
void modify(int u,int pos,int x)
{
if(tr[u].l==tr[u].r) return tr[u].p={x,x},void();
int mid=tr[u].l+tr[u].r>>1;
if(pos<=mid) modify(u<<1,pos,x);
else modify(u<<1|1,pos,x);
pushup(u);
}
int query(int u,PII tmp)
{
if(tr[u].l==tr[u].r) return tr[u].r;
PII t=(tmp.x==0&&tmp.y==0)?tr[u<<1].p:merge(tmp,tr[u<<1].p);
if(t.x>=0) return query(u<<1|1,t);
else return query(u<<1,tmp);
}
int n;
int deg[N];
int main()
{
read(n);
for(int i=1;i<=n;++i) read(col[i]),mp[++col[i]]=i;
for(int i=2,fa;i<=n;++i) read(fa),g[fa].push_back(i),++deg[i],++deg[fa];
bool flag=true;
for(int i=1;i<=n;++i) if(deg[i]>2) flag=false;
dfs(1);
lg[0]=-1;
for(int i=1;i<N;++i) lg[i]=lg[i>>1]+1;
for(int j=1;j<=21;++j)
{
for(int i=1;i<=idx;++i)
{
st[i][j]=st[i][j-1];
if(i+(1<<j-1)<=idx) st[i][j]=chk(st[i][j],st[i+(1<<j-1)][j-1]);
}
}
build(1,1,n);
int q;read(q);
while(q--)
{
int op,x,y;
read(op);
if(op==1)
{
read(x),read(y);
if(flag) continue;
modify(1,col[x],y),modify(1,col[y],x);
swap(col[x],col[y]);
}
else if(flag) printf("%d\n",n);
else printf("%d\n",query(1,{0,0})-1);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIHJlYWQoVCAmeCkKewogeD0wO3Nob3J0IGY9MTtjaGFyIGM9Z2V0Y2hhcigpOwogZm9yKDtjPCcwJ3x8Yz4nOSc7Yz1nZXRjaGFyKCkpIGlmKGM9PSctJykgZj0tMTsKIGZvcig7Yz49JzAnJiZjPD0nOSc7Yz1nZXRjaGFyKCkpIHg9KHg8PDEpKyh4PDwzKSsoY140OCk7CiB4Kj1mO3JldHVybjsKfQpjb25zdCBpbnQgTj01ZTUrNTsKdXNpbmcgUElJPXBhaXI8aW50LGludD47CiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCnZlY3RvcjxpbnQ+Z1tOXTsKaW50IGRlcFtOXSxtcFtOXSxjb2xbTl0sZGZuW05dOwppbnQgc3RbTl1bMjVdLGlkeDsKdm9pZCBkZnMoaW50IHUpCnsKIGRmblt1XT0rK2lkeCxzdFtpZHhdWzBdPXU7CiBmb3IoaW50IHY6Z1t1XSkgZGVwW3ZdPWRlcFt1XSsxLGRmcyh2KSxzdFsrK2lkeF1bMF09dTsKfQppbnQgbGdbTl07CmludCBjaGsoaW50IHgsaW50IHkpe3JldHVybiBkZXBbeF08ZGVwW3ldP3g6eTt9CmludCBsY2EoaW50IHgsaW50IHkpCnsKIGlmKHg+eSkgc3dhcCh4LHkpOyAKIGludCBrPWxnW3kteCsxXTsKIHJldHVybiBjaGsoc3RbeF1ba10sc3RbeS0oMTw8aykrMV1ba10pOwp9CmludCBkaXMoaW50IHgsaW50IHkpCnsKIGludCBsPWxjYShkZm5beF0sZGZuW3ldKTsKIHJldHVybiBkZXBbeF0rZGVwW3ldLTIqZGVwW2xdOwp9CnN0cnVjdCBub2RlewogaW50IGwscjsgCiBQSUkgcDsKfXRyW04qNF07CmJvb2wgY2hrX2luKFBJSSBhLGludCB4KXtyZXR1cm4gZGlzKGEueCxhLnkpPT1kaXMoYS54LHgpK2RpcyhhLnkseCk7fQpQSUkgbWVyZ2UoUElJIGEsUElJIGIpCnsKIGlmKGEueDwwfHxiLng8MCkgcmV0dXJuIHstMSwtMX07IAogaWYoY2hrX2luKGEsYi54KSYmY2hrX2luKGEsYi55KSkgcmV0dXJuIGE7CiBpZihjaGtfaW4oYixhLngpJiZjaGtfaW4oYixhLnkpKSByZXR1cm4gYjsKIGlmKGNoa19pbih7YS54LGIueH0sYS55KSYmY2hrX2luKHthLngsYi54fSxiLnkpKSByZXR1cm4ge2EueCxiLnh9OwogaWYoY2hrX2luKHthLngsYi55fSxhLnkpJiZjaGtfaW4oe2EueCxiLnl9LGIueCkpIHJldHVybiB7YS54LGIueX07CiBpZihjaGtfaW4oe2EueSxiLnh9LGEueCkmJmNoa19pbih7YS55LGIueH0sYi55KSkgcmV0dXJuIHthLnksYi54fTsKIGlmKGNoa19pbih7YS55LGIueX0sYS54KSYmY2hrX2luKHthLnksYi55fSxiLngpKSByZXR1cm4ge2EueSxiLnl9OwogcmV0dXJuIHstMSwtMX07IAp9CnZvaWQgcHVzaHVwKGludCB1KXt0clt1XS5wPW1lcmdlKHRyW3U8PDFdLnAsdHJbdTw8MXwxXS5wKTt9CnZvaWQgYnVpbGQoaW50IHUsaW50IGwsaW50IHIpCnsKIHRyW3VdLmw9bCx0clt1XS5yPXI7CiBpZihsPT1yKSByZXR1cm4gdHJbdV0ucD17bXBbbF0sbXBbbF19LHZvaWQoKTsKIGludCBtaWQ9bCtyPj4xOwogYnVpbGQodTw8MSxsLG1pZCksYnVpbGQodTw8MXwxLG1pZCsxLHIpOwogcHVzaHVwKHUpOyAKfQp2b2lkIG1vZGlmeShpbnQgdSxpbnQgcG9zLGludCB4KQp7CiBpZih0clt1XS5sPT10clt1XS5yKSByZXR1cm4gdHJbdV0ucD17eCx4fSx2b2lkKCk7CiBpbnQgbWlkPXRyW3VdLmwrdHJbdV0ucj4+MTsKIGlmKHBvczw9bWlkKSBtb2RpZnkodTw8MSxwb3MseCk7CiBlbHNlIG1vZGlmeSh1PDwxfDEscG9zLHgpOwogcHVzaHVwKHUpOwp9CmludCBxdWVyeShpbnQgdSxQSUkgdG1wKQp7CiBpZih0clt1XS5sPT10clt1XS5yKSByZXR1cm4gdHJbdV0ucjsKIFBJSSB0PSh0bXAueD09MCYmdG1wLnk9PTApP3RyW3U8PDFdLnA6bWVyZ2UodG1wLHRyW3U8PDFdLnApOwogaWYodC54Pj0wKSByZXR1cm4gcXVlcnkodTw8MXwxLHQpOwogZWxzZSByZXR1cm4gcXVlcnkodTw8MSx0bXApOwp9CmludCBuOwppbnQgZGVnW05dOwppbnQgbWFpbigpCnsKIHJlYWQobik7CiBmb3IoaW50IGk9MTtpPD1uOysraSkgcmVhZChjb2xbaV0pLG1wWysrY29sW2ldXT1pOwogZm9yKGludCBpPTIsZmE7aTw9bjsrK2kpIHJlYWQoZmEpLGdbZmFdLnB1c2hfYmFjayhpKSwrK2RlZ1tpXSwrK2RlZ1tmYV07CiBib29sIGZsYWc9dHJ1ZTsKIGZvcihpbnQgaT0xO2k8PW47KytpKSBpZihkZWdbaV0+MikgZmxhZz1mYWxzZTsKIGRmcygxKTsKIGxnWzBdPS0xOwogZm9yKGludCBpPTE7aTxOOysraSkgbGdbaV09bGdbaT4+MV0rMTsgCiBmb3IoaW50IGo9MTtqPD0yMTsrK2opCiB7CiAgZm9yKGludCBpPTE7aTw9aWR4OysraSkKICB7CiAgIHN0W2ldW2pdPXN0W2ldW2otMV07CiAgIGlmKGkrKDE8PGotMSk8PWlkeCkgc3RbaV1bal09Y2hrKHN0W2ldW2pdLHN0W2krKDE8PGotMSldW2otMV0pOwogIH0KIH0KIGJ1aWxkKDEsMSxuKTsKIGludCBxO3JlYWQocSk7CiB3aGlsZShxLS0pCiB7CiAgaW50IG9wLHgseTsKICByZWFkKG9wKTsKICBpZihvcD09MSkKICB7CiAgIHJlYWQoeCkscmVhZCh5KTsKICAgaWYoZmxhZykgY29udGludWU7CiAgIG1vZGlmeSgxLGNvbFt4XSx5KSxtb2RpZnkoMSxjb2xbeV0seCk7CiAgIHN3YXAoY29sW3hdLGNvbFt5XSk7CiAgfQogIGVsc2UgaWYoZmxhZykgcHJpbnRmKCIlZFxuIixuKTsKICBlbHNlIHByaW50ZigiJWRcbiIscXVlcnkoMSx7MCwwfSktMSk7CiB9IAogcmV0dXJuIDA7Cn0KCg==