#include<bits/stdc++.h>
#define re register int
#define il inline
using namespace std;
const int N=4e5+10;
int fa[N],nx[N],n,m,op,lstans,kuai,k,x,y,chg[1650];
long long tag[1650];
il int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-'){f=-1;}ch=getchar();}
while(ch>='0'&ch<='9'){x=(x<<3)+(x<<1)+(ch-'0');ch=getchar();}
return x*f;
}
il long long MAX(long long A,long long B){return A>B?A:B;}
il long long MIN(long long A,long long B){return A<B?A:B;}
il int NX(int u){
if(chg[u/kuai]<=kuai)return nx[u];
return MAX(1ll,fa[u]-tag[u/kuai]);
}
il int FA(int u){
if(chg[u/kuai]<=kuai)return fa[u];
return MAX(1ll,fa[u]-tag[u/kuai]);
}
int main(){
n=read();m=read();
kuai=sqrt(n);
for(re i=2;i<=n;i++)fa[i]=read();
fa[1]=1;nx[1]=1;
for(re i=2;i<=n;i++){
if(fa[i]/kuai!=i/kuai)nx[i]=fa[i];
else nx[i]=nx[fa[i]];
}
while(m--){
op=read();x=read();y=read();
x^=lstans;y^=lstans;
if(op==1){
k=read();
k^=lstans;
if(x/kuai==y/kuai){
for(re i=x;i<=y;i++)fa[i]=max(fa[i]-k,1);
for(re i=x;i<min(n+1,(y/kuai+1)*kuai);i++){
if(chg[i/kuai]<=kuai){
if(fa[i]/kuai!=i/kuai)nx[i]=fa[i];
else nx[i]=nx[fa[i]];
}
}
}
else{
int l=x,r=y;
for(re i=l;i<min(n+1,(l/kuai+1)*kuai);i++)
fa[i]=max(fa[i]-k,1);
for(re i=l;i<min(n+1,(l/kuai+1)*kuai);i++){
if(chg[i/kuai]<=kuai){
if(fa[i]/kuai!=i/kuai)nx[i]=fa[i];
else nx[i]=nx[fa[i]];
}
}
for(re i=r/kuai*kuai;i<=r;i++)
fa[i]=max(fa[i]-k,1);
for(re i=r/kuai*kuai;i<=r;i++){
if(chg[i/kuai]<=kuai){
if(fa[i]/kuai!=i/kuai)nx[i]=fa[i];
else nx[i]=nx[fa[i]];
}
}
for(re i=l/kuai+1;i<r/kuai;i++){
if(chg[i]<=kuai){
for(re j=i*kuai;j<MIN(n+1,(long long)(i+1)*kuai);j++)
fa[j]=max(fa[j]-k,1);
for(re j=i*kuai;j<MIN(n+1,(long long)(i+1)*kuai);j++){
if(chg[j/kuai]<=kuai){
if(fa[j]/kuai!=j/kuai)nx[j]=fa[j];
else nx[j]=nx[fa[j]];
}
}
}
else{
tag[i]+=k;
if(tag[i]>n)tag[i]=n;
}
chg[i]++;
}
}
}
else{
while(x!=y){
int xx=NX(x),yy=NX(y);
if(xx/kuai!=yy/kuai){
if(xx/kuai<yy/kuai)y=yy;
else x=xx;
}
else{
if(xx!=yy){
if(xx<yy)y=yy;
else x=xx;
}
else{
if(x<y)y=FA(y);
else x=FA(x);
}
}
}
lstans=x;
printf("%d\n",lstans);
}
}
}