#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5+10;
int sum[maxn<<6],ls[maxn<<6],rs[maxn<<6];
int cnt,rt[maxn],a[maxn],num;
void Modify(int &rt,int q,int l,int r,int val,int num) {
rt = ++cnt;
sum[rt] = sum[q]+num;
ls[rt] = ls[q];
rs[rt] = rs[q];
if(l==r) {
return;
}
int mid = (l+r)>>1;
if(val<=mid) {
Modify(ls[rt],ls[q],l,mid,val,num);
} else {
Modify(rs[rt],rs[q],mid+1,r,val,num);
}
}
int Ask(int rt,int q,int l,int r,int val) {
if(l==r) {
return sum[q]-sum[rt];
}
int mid = (l+r)>>1;
if(val<=mid) {
return Ask(ls[rt],ls[q],l,mid,val);
} else {
return Ask(rs[rt],rs[q],mid+1,r,val);
}
}
int main() {
int n,m;
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; ++i) {
scanf("%d",&a[i]);
}
for(int i =1; i<=n; ++i) {
Modify(rt[i],rt[i-1],1,n,a[i],1);
}
while(m--) {
int op,l,r,pos;
scanf("%d",&op);
if(op==1) {
scanf("%d%d%d",&l,&r,&pos);
printf("%d\n",Ask(rt[l-1],rt[r],1,n,pos));
} else {
scanf("%d",&pos);
Modify(rt[pos],rt[pos],1,n,a[pos],-1);
Modify(rt[pos],rt[pos],1,n,a[pos+1],1);
swap(a[pos],a[pos+1]);
}
}
return 0;
}