#include<bits/stdc++.h>
#define AC 300005
using namespace std;
inline int read()
{
int s=0,t=1;
char c=getchar();
while (c<'0'||c>'9')
{
if (c=='-') t=-1;
c=getchar();
}
while (c>='0'&&c<='9')
{
s=s*10+c-48;c=getchar();
}
return s*t;
}
inline void write(int x)
{
if (x<0)
{
putchar('-');x=-x;
}
if (x>9) write(x/10);
putchar(x%10+'0');
}
vector<int>v[AC];
int color[AC];
int main()
{
int n,m;
n=read();m=read();
for (register int i=1;i<=n;++i)
{
color[i]=read();
v[color[i]].push_back(i);
}
for (register int i=1;i<=m;++i)
{
int op,l,r,c;
op=read();
if (op==1)
{
l=read();r=read();c=read();
write(upper_bound(v[c].begin(),v[c].end(),r)-lower_bound(v[c].begin(),v[c].end(),l));
putchar('\n');
}
else
{
c=read();
v[color[c]][lower_bound(v[c].begin(),v[c].end(),c)]=c+1;
v[color[c+1]][lower_bound(v[c+1].begin(),v[c+1].end(),c+1)]=c;
swap(color[c],color[c+1]);
}
}
return 0;
}