rt
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005],b[100005][2],cn[170][100005],c[170][100005],d[170][320],e[100005],ee[170][100005],l1[170],r1[170],l2[320],r2[320],cc[100005],dd[320],s[605],k,l,r,x,y,z,bl,cnt;
inline int read()
{
int result=0;
char ch=getchar();
while (ch<'0' || ch>'9')
ch=getchar();
while ('0'<=ch && ch<='9')
{
result=result*10+(ch^48);
ch=getchar();
}
return result;
}
inline void write(int x)
{
if (x>=10)
write(x/10);
putchar(x%10|48);
}
inline int find(int x)
{
return x==e[x]?x:e[x]=find(e[x]);
}
inline void modify(int l,int r,int x,int y)
{
s[0]=0;
cnt=0;
ee[b[l][0]][x]=0;
ee[b[l][0]][y]=0;
for (register int i=l1[b[l][0]];i<=r1[b[l][0]];++i)
{
a[i]=a[find(i)];
if (a[i]==x || a[i]==y)
s[++s[0]]=i;
}
for (register int i=l;i<=r;++i)
if (a[i]==x)
{
a[i]=y;
++cnt;
}
for (register int i=1;i<=s[0];++i)
{
if (ee[b[l][0]][a[s[i]]])
e[s[i]]=ee[b[l][0]][a[s[i]]];
else
{
e[s[i]]=s[i];
ee[b[l][0]][a[s[i]]]=s[i];
}
}
cn[b[l][0]][x]-=cnt;
cn[b[l][0]][y]+=cnt;
for (register int i=b[l][0];i<=b[n][0];++i)
{
c[i][x]-=cnt;
c[i][y]+=cnt;
if (b[x][1]!=b[y][1])
{
d[i][b[x][1]]-=cnt;
d[i][b[y][1]]+=cnt;
}
}
}
int main()
{
n=read();
m=read();
for (register int i=1;i<=100000;++i)
{
b[i][1]=(i-1)/316+1;
if (l2[b[i][1]]==0)
l2[b[i][1]]=i;
r2[b[i][1]]=i;
}
for (register int i=1;i<=n;++i)
{
a[i]=read();
b[i][0]=(i-1)/600+1;
if (l1[b[i][0]]==0)
l1[b[i][0]]=i;
r1[b[i][0]]=i;
++cn[b[i][0]][a[i]];
++c[b[i][0]][a[i]];
++d[b[i][0]][b[a[i]][1]];
if (ee[b[i][0]][a[i]])
e[i]=ee[b[i][0]][a[i]];
else
{
e[i]=i;
ee[b[i][0]][a[i]]=i;
}
}
for (register int i=1;i<=b[n][0];++i)
{
for (register int j=1;j<=100000;++j)
c[i][j]+=c[i-1][j];
for (register int j=1;j<=b[100000][1];++j)
d[i][j]+=d[i-1][j];
}
while (m--)
{
k=read();
if (k==1)
{
l=read();
r=read();
x=read();
y=read();
if (b[l][0]==b[r][0])
modify(l,r,x,y);
else
{
modify(l,r1[b[l][0]],x,y);
modify(l1[b[r][0]],r,x,y);
cnt=0;
for (register int i=b[l][0]+1;i<b[r][0];++i)
{
if (ee[i][x])
{
if (ee[i][y])
e[ee[i][x]]=ee[i][y];
else
{
a[ee[i][x]]=y;
ee[i][y]=ee[i][x];
}
ee[i][x]=0;
cn[i][y]+=cn[i][x];
cnt+=cn[i][x];
cn[i][x]=0;
}
c[i][x]-=cnt;
c[i][y]+=cnt;
if (b[x][1]!=b[y][1])
{
d[i][b[x][1]]-=cnt;
d[i][b[y][1]]+=cnt;
}
}
for (register int i=b[r][0];i<=b[n][0];++i)
{
c[i][x]-=cnt;
c[i][y]+=cnt;
if (b[x][1]!=b[y][1])
{
d[i][b[x][1]]-=cnt;
d[i][b[y][1]]+=cnt;
}
}
}
}
else
{
x=read();
y=read();
z=read();
if (b[x][0]==b[y][0])
{
for (register int i=x;i<=y;++i)
{
a[i]=a[find(i)];
++cc[a[i]];
++dd[b[a[i]][1]];
}
for (bl=1;bl<=b[100000][1];++bl)
{
if (z-dd[bl]<=0)
break;
z-=dd[bl];
}
for (register int i=l2[bl];i<=r2[bl];++i)
{
if (z-cc[i]<=0)
{
write(i);
putchar('\n');
break;
}
z-=cc[i];
}
for (int i=x;i<=y;++i)
{
cc[a[i]]=0;
dd[b[a[i]][1]]=0;
}
}
else
{
for (register int i=x;b[i][0]==b[x][0];++i)
{
a[i]=a[find(i)];
++cc[a[i]];
++dd[b[a[i]][1]];
}
for (register int i=y;b[i][0]==b[y][0];--i)
{
a[i]=a[find(i)];
++cc[a[i]];
++dd[b[a[i]][1]];
}
for (bl=1;bl<=b[100000][1];++bl)
{
if (z-dd[bl]-d[b[y][0]-1][bl]+d[b[x][0]][bl]<=0)
break;
z-=dd[bl]+d[b[y][0]-1][bl]-d[b[x][0]][bl];
}
for (register int i=l2[bl];i<=r2[bl];++i)
{
if (z-cc[i]-c[b[y][0]-1][i]+c[b[x][0]][i]<=0)
{
write(i);
putchar('\n');
break;
}
z-=cc[i]+c[b[y][0]-1][i]-c[b[x][0]][i];
}
for (register int i=x;b[i][0]==b[x][0];++i)
{
cc[a[i]]=0;
dd[b[a[i]][1]]=0;
}
for (register int i=y;b[i][0]==b[y][0];--i)
{
cc[a[i]]=0;
dd[b[a[i]][1]]=0;
}
}
}
}
}