#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
const int MAXN = 1e5 + 5;
struct item{
int x, pos;
} A[MAXN];
int bit[MAXN], idx[MAXN], revidx[MAXN], N, Q, j, k;
void add(int pos, int v){ for(; pos<=N; pos+=(pos & -pos)) bit[pos] += v; }
int query(int pos){
int res = 0;
for(; pos>0; pos-=(pos & -pos)) res += bit[pos];
return res;
}
int LO(int x){
int lo = 0, hi = N, mid, cur;
if(query(N) < x) return N + 1;
while(lo < hi - 1) {
mid = (lo + hi)>>1;
cur = query(mid);
if(cur >= x) hi = mid;
else lo = mid;
}
return hi;
}
int comp(item a, item b) {
return a.x < b.x;
}
int main(){
scanf("%d %d", &N, &Q);
for(int i=1; i<=N; ++i){
scanf("%d", &A[i].x);
A[i].pos = i;
}
sort(A + 1, A + N + 1, comp);
for(int i=1; i<=N; ++i){
idx[A[i].pos] = i, revidx[i] = A[i].pos;
add(i, A[i].x - A[i-1].x);
}
while(Q--){
scanf("%d %d", &k, &j);
if(k == 1){
int prev = j, cur, p;
j = idx[j];
cur = LO(query(j) + 1) - 1;
add(cur, 1); add(cur + 1, -1);
p = revidx[cur], idx[prev] = cur, revidx[cur] = prev;
idx[p] = j, revidx[j] = p;
}
else if(k == 2) printf("%d\n", N - LO(j) + 1);
else add(LO(j), -1);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNvbnN0IGludCBNQVhOID0gMWU1ICsgNTsKIApzdHJ1Y3QgaXRlbXsKICBpbnQgeCwgcG9zOwp9IEFbTUFYTl07CiAKaW50IGJpdFtNQVhOXSwgaWR4W01BWE5dLCByZXZpZHhbTUFYTl0sIE4sIFEsIGosIGs7ICAgICAgCiAKdm9pZCBhZGQoaW50IHBvcywgaW50IHYpeyBmb3IoOyBwb3M8PU47IHBvcys9KHBvcyAmIC1wb3MpKSBiaXRbcG9zXSArPSB2OyB9CiAKaW50IHF1ZXJ5KGludCBwb3MpewogIGludCByZXMgPSAwOwogIGZvcig7IHBvcz4wOyBwb3MtPShwb3MgJiAtcG9zKSkgcmVzICs9IGJpdFtwb3NdOwogIHJldHVybiByZXM7Cn0KIAppbnQgTE8oaW50IHgpewogIGludCBsbyA9IDAsIGhpID0gTiwgbWlkLCBjdXI7CiAgaWYocXVlcnkoTikgPCB4KSByZXR1cm4gTiArIDE7CiAgd2hpbGUobG8gPCBoaSAtIDEpIHsKICAgIG1pZCA9IChsbyArIGhpKT4+MTsKICAgIGN1ciA9IHF1ZXJ5KG1pZCk7CiAgICBpZihjdXIgPj0geCkgaGkgPSBtaWQ7CiAgICBlbHNlIGxvID0gbWlkOwogIH0KICByZXR1cm4gaGk7Cn0KIAppbnQgY29tcChpdGVtIGEsIGl0ZW0gYikgewogIHJldHVybiBhLnggPCBiLng7Cn0KIAppbnQgbWFpbigpewogIHNjYW5mKCIlZCAlZCIsICZOLCAmUSk7CiAgZm9yKGludCBpPTE7IGk8PU47ICsraSl7CiAgICBzY2FuZigiJWQiLCAmQVtpXS54KTsKICAgIEFbaV0ucG9zID0gaTsKICB9CiAgc29ydChBICsgMSwgQSArIE4gKyAxLCBjb21wKTsKICBmb3IoaW50IGk9MTsgaTw9TjsgKytpKXsKICAgIGlkeFtBW2ldLnBvc10gPSBpLCByZXZpZHhbaV0gPSBBW2ldLnBvczsKICAgIGFkZChpLCBBW2ldLnggLSBBW2ktMV0ueCk7CiAgfSAKICB3aGlsZShRLS0pewogICAgc2NhbmYoIiVkICVkIiwgJmssICZqKTsKICAgIGlmKGsgPT0gMSl7CiAgICAgIGludCBwcmV2ID0gaiwgY3VyLCBwOwogICAgICBqID0gaWR4W2pdOwogICAgICBjdXIgPSBMTyhxdWVyeShqKSArIDEpIC0gMTsKICAgICAgYWRkKGN1ciwgMSk7IGFkZChjdXIgKyAxLCAtMSk7CiAgICAgIHAgPSByZXZpZHhbY3VyXSwgaWR4W3ByZXZdID0gY3VyLCByZXZpZHhbY3VyXSA9IHByZXY7CiAgICAgIGlkeFtwXSA9IGosIHJldmlkeFtqXSA9IHA7CiAgICB9CiAgICBlbHNlIGlmKGsgPT0gMikgcHJpbnRmKCIlZFxuIiwgTiAtIExPKGopICsgMSk7CiAgICBlbHNlIGFkZChMTyhqKSwgLTEpOwogIH0KICByZXR1cm4gMDsKfQ==