#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N=3e5+10;
int n;
vector<int> p[N];
int a[N];
int main()
{
int m;
cin>>n>>m;
for(int i=1;i<N;i++)p[i].push_back(-1e9);
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
p[x].push_back(i);
a[i]=x;
}
for(int i=1;i<N;i++)p[i].push_back(1e9);
while(m--){
int pos;
scanf("%d",&pos);
if(pos==1){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
int l=0,r=p[c].size()-1;
while(l<r){
int mid=(l+r)>>1;
if(p[c][mid]>=x)r=mid;
else l=mid+1;
}
x=l;
l=0,r=p[c].size()-1;
while(l<r){
int mid=(l+r+1)>>1;
if(p[c][mid]<=y)l=mid;
else r=mid-1;
}
if(l<x)printf("0\n");
else printf("%d\n",(l-x+1));
}
else{
int x,y;
scanf("%d",&x);
int l=0,r=p[a[x]].size()-1;
while(l<r){
int mid=(l+r+1)>>1;
if(p[a[x]][mid]<=x)l=mid;
else r=mid-1;
}
y=l;
l=0,r=p[a[x+1]].size()-1;
while(l<r){
int mid=(l+r+1)>>1;
if(p[a[x+1]][mid]<=x+1)l=mid;
else r=mid-1;
}
swap(p[a[x]][y],p[a[x+1]][l]);
}
}
}