#include <bits/stdc++.h>
using namespace std;
#define il inline
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)>(b)?(b):(a))
#define Abs(x) ((x)>0?(x):-(x))
const int N=1e5+5,B=350;
int n,q,a[N],s[N],lsans=0;
int num[B][N],x,y;
int L[B],R[B],bl,tot;
int st[B][B],ed[B][B];
vector<int>t[B];
short f[B][B][B];
int len[B];
int cnt[N];
bool vis[B][N];
il void init()
{
bl=sqrt(n);tot=(n-1)/bl+1;
for(int i=1;i<=tot;i++)L[i]=R[i-1]+1,R[i]=(i==tot?n:i*bl);
for(int i=1;i<=tot;i++)
{
for(int j=L[i];j<=R[i];j++)t[i].push_back(a[j]);
sort(t[i].begin(),t[i].end());
len[i]=unique(t[i].begin(),t[i].end())-t[i].begin();
for(int j=L[i];j<=R[i];j++)s[j]=lower_bound(t[i].begin(),t[i].end(),a[j])-t[i].begin()+1;
}
for(int i=1;i<=tot;i++)
{
for(int j=L[i];j<=R[i];j++)
{
vis[i][a[j]]=1;
num[i][a[j]]=s[j];
ed[i][s[j]]=j;
if(!st[i][s[j]])st[i][s[j]]=j;
}
}
for(int i=0;i<=tot;i++)for(int j=0;j<=len[i];j++)for(int k=0;k<=len[i];k++)f[i][j][k]=B;
for(int i=1;i<=tot;i++)
{
for(int j=L[i];j<=R[i];j++)
{
for(int k=L[i];k<=R[i];k++)
{
f[i][s[j]][s[k]]=Min(f[i][s[j]][s[k]],Abs(j-k));
}
}
}
return;
}
il void change()
{
cnt[y]=1,cnt[x]=0;
for(int i=1,idx,idy;i<=tot;i++)
{
if(len[i]==1)
{
if(vis[i][x])
{
vis[i][y]=1,vis[i][x]=0,num[i][y]=num[i][x],num[i][x]=0;
}
continue;
}
if(!vis[i][x])continue;
if(!vis[i][y])
{
vis[i][y]=1,vis[i][x]=0,num[i][y]=num[i][x];num[i][x]=0;
continue;
}
vis[i][y]=1,vis[i][x]=0;
idx=num[i][x],idy=num[i][y];
st[i][idy]=Min(st[i][idy],st[i][idx]);
st[i][idx]=n+1;
ed[i][idy]=Max(ed[i][idy],ed[i][idx]);
ed[i][idx]=0;
for(int j=L[i],tt;j<=R[i];j++)
{
tt=num[i][a[j]];
f[i][idy][tt]=f[i][tt][idy]=Min(f[i][idy][tt],f[i][idx][tt]);
f[i][idx][tt]=f[i][tt][idx]=B;
}
num[i][x]=num[i][y];
len[i]--;
}
return;
}
il void query()
{
int ans=n+1,lsx=0,lsy=0;
for(int i=1;i<=tot;i++)
{
if(vis[i][x]&&vis[i][y])ans=Min(ans,f[i][num[i][x]][num[i][y]]);
if(lsx&&vis[i][y])ans=Min(ans,Abs(lsx-st[i][num[i][y]]));
if(vis[i][x])lsx=ed[i][num[i][x]];
if(lsy&&vis[i][x])ans=Min(ans,Abs(lsy-st[i][num[i][x]]));
if(vis[i][y])lsy=ed[i][num[i][y]];
}
if(ans==n+1)cout<<"Ikaros\n";
else cout<<ans<<'\n';
if(ans==n+1)ans=0;
lsans=ans;
return;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i];cnt[a[i]]=1;
}
init();
int op;
while(q--)
{
cin>>op>>x>>y;
x^=lsans,y^=lsans;
if(x==y)
{
if(op==2)
{
if(cnt[x])cout<<"0\n";
else cout<<"Ikaros\n";
lsans=0;
}
continue;
}
if(op==1)change();
else query();
}
return 0;
}