#include<bits/stdc++.h>
using namespace std;
inline int qread()
{
int a=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){(a*=10)+=(ch^48);ch=getchar();}
return a*f;
}
int n,m,a[100010],ans;
int cl,c[100010],st[100010],ed[100010],dis[300][300][300],id[350][350],L[350][350],R[350][350],lsh[350][350],LSH[350],pos[350][100010];
vector<int>P[100010];
inline int Qs(int x,int y)
{
int an=n+1,p=0;
for(int i:P[x])
{
while(p<(int)P[y].size()&&P[y][p]<i)an=min(an,i-P[y][p++]);
if(p<P[y].size())an=min(P[y][p]-i,an);
}
return an;
}
inline void build(int x)
{
for(int i=st[x];i<=ed[x];++i)P[lsh[x][++LSH[x]]=a[i]].emplace_back(i);
sort(lsh[x]+1,lsh[x]+1+LSH[x]);
LSH[x]=unique(lsh[x]+1,lsh[x]+1+LSH[x])-lsh[x]-1;
for(int i=1;i<=LSH[x];++i)
{
pos[x][lsh[x][i]]=i;
for(int j=st[x];j<=ed[x];++j)if(a[j]==lsh[x][i])L[x][i]=min(L[x][i],j),R[x][i]=j;
for(int j=i+1;j<=LSH[x];++j)dis[x][i][j]=Qs(lsh[x][i],lsh[x][j]);
P[lsh[x][i]].clear();
}
return ;
}
inline void solve(int id,int x,int y)
{
if(!pos[id][x])return ;
if(!pos[id][y])
{
pos[id][y]=pos[id][x];pos[id][x]=0;
for(int i=1;i<=LSH[id];++i)if(lsh[id][i]==x)lsh[id][i]=y;
return ;
}
pos[id][x]=0;int idx=0,idy=0;
for(int i=1;i<=LSH[id];++i)
{
if(lsh[id][i]==y)idy=i;
if(lsh[id][i]==x)idx=i,lsh[id][i]=-1;
}
L[id][idy]=min(L[id][idy],L[id][idx]);
R[id][idy]=max(R[id][idy],R[id][idx]);
for(int i=1;i<=LSH[id];++i)
{
if(!~lsh[id][i]||i==idy)continue;
if(i<idy)dis[id][i][idy]=min(dis[id][i][idy],(i<idx)?dis[id][i][idx]:dis[id][idx][i]);
else dis[id][idy][i]=min(dis[id][idy][i],(i<idx)?dis[id][i][idx]:dis[id][idx][i]);
}
return ;
}
inline int Q(int x,int y)
{
int an=n+1,lx=-n,ly=-n;
for(int i=1,idx,idy;i<=c[n];++i)
{
idx=pos[i][x],idy=pos[i][y];
if(idx)an=min(an,L[i][idx]-ly);
if(idy)an=min(an,L[i][idy]-lx);
if(idx)lx=R[i][idx];if(idy)ly=R[i][idy];
if(idx>idy)swap(idx,idy);
if(idx&&idy)an=min(an,dis[i][idx][idy]);
}
if(an==n+1)return -1;
return an;
}
inline void pw(int x)
{
for(int i=1;i<=LSH[x];++i)printf("[%d %d] ",i,lsh[x][i]);puts("");
for(int i=1;i<=LSH[x];++i)printf("{%d %d} ",L[x][i],R[x][i]);puts("");
for(int i=1;i<=LSH[x];++i)
{
for(int j=1;j<=LSH[x];++j)printf("%d ",dis[x][i][j]);
puts("");
}
return ;
}
int main()
{
n=qread();m=qread();cl=350;
memset(L,63,sizeof(L));
for(int i=1;i<=n;++i)a[i]=qread(),c[i]=(i-1)/cl+1,ed[c[i]]=i;
for(int i=n;i;--i)st[c[i]]=i;
for(int i=1;i<=c[n];++i)build(i);
for(int i=1,op,x,y;i<=m;++i)
{
op=qread();x=qread()^ans,y=qread()^ans;
if(op==1)
{
if(x==y)continue;
for(int j=1;j<=c[n];++j)solve(j,x,y);
}
else
{
ans=Q(x,y);
if(~ans)printf("%d\n",ans);
else ans=0,puts("Ikaros");
}
}
return 0;
}