import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.BitSet;
import java.util.HashMap;
//import java.util.Map;
class TEMPLEQ {
static int a[];
static int count=0;
// TODO Auto-generated method stub
long time
=System.
currentTimeMillis(); //Reader r=new Reader("/media/ankit/Softwares/ECLIPSE/SPOJ/SPOJ CLASSICAL/src/InputTemple.txt");
int n=r.nextInt();
int q=r.nextInt();
StringBuilder sb=new StringBuilder();
//PrintWriter prfile=new PrintWriter("/media/ankit/Softwares/ECLIPSE/SPOJ/SPOJ CLASSICAL/src/OutputTemple.txt");
a=new int[n+1];
int b[]=new int[n+1];
//segtree=new int[4*n];
for(int i=1;i<=n;i++){a[i]=r.nextInt();
b[i]=a[i];}
for(int i=1;i<=n;i++){
int pos=binarySearch(a, b[i]);
hm.put(i, pos);
}
/*for(Map.Entry<Integer, Integer> entry:hm.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
}
*/
for(int i=0;i<q;i++){
int choice=r.nextInt();
int number=r.nextInt();
if(choice==1){
number=hm.get(number);
int bval=a[number];
int j=binsearch_rightmost(a, bval, number, a.length-1);
a[j]++;
}
else if(choice==2){
int ans=binsearch_leftmost(a,number,1,n);
if(a[ans]>=number)
sb.append((n-ans+1)+"\n");
else sb.append((n-ans)+"\n");
}
else
{
int ans=binsearch_leftmost(a,number,1,n);
if(a[ans]>=number)
for(int j=ans;j<a.length;++j)a[j]--;
}
//System.out.println(i);
}
prfile.write(sb.toString());
System.
out.
println((System.
currentTimeMillis()-time
)/1000.0); prfile.flush();
prfile.close();
}
public static int binarySearch(int a[],int val){
int low=0,high=a.length-1,mid=(low+((high-low+1)>>1));
while(low<high){
mid=(low+((high-low+1)>>1));
if(a[mid]>=val)high=mid-1;
else low=mid;
}
mid=(low+((high-low+1)>>1));
if(a[mid]<val){
int j;
for( j=mid+1;a[j]!=val;j++);
mid=j;
}
if(!bs.get(mid)){
bs.set(mid);
return mid;
}
else{
int j;
for( j=mid;j>0 && a[j]==val && !bs.get(j);j--);
if(j!=mid)return j;
else{
j++;
for(;j<a.length && a[j]==val;j++){
if(!bs.get(j)){
bs.set(j);
break;
}
}
return j;
}
}
}
public static int binsearch_rightmost(int a[],int val,int left,int right){
if(left==right)return left;
int mid=(left+right+1)>>1;
if(a[mid]>val)return binsearch_rightmost( a, val, left, mid-1);
return binsearch_rightmost(a, val, mid, right);
}
public static int binsearch_leftmost(int a[],int val,int left,int right){
if(left==right) return left;
int mid = (left+right)>>1;
if(a[mid] < val)
return binsearch_leftmost(a,val,mid+1,right);
else
return binsearch_leftmost(a,val,left,mid);
}
final private int BUFFER_SIZE = 1 << 16;
private byte[] buffer;
private int bufferPointer, bytesRead;
buffer = new byte[BUFFER_SIZE];
bufferPointer = bytesRead = 0;
}
buffer = new byte[BUFFER_SIZE];
bufferPointer = bytesRead = 0;
}
byte[] buf = new byte[64];
int cnt = 0, c;
while ((c = read()) != -1) {
if (c == '\n')
break;
buf[cnt++] = (byte) c;
}
return new String(buf,
0, cnt
); }
int ret = 0;
byte c = read();
while (c <= ' ')
c = read();
boolean neg = (c == '-');
if (neg)
c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (neg)
return -ret;
return ret;
}
long ret = 0;
byte c = read();
while (c <= ' ')
c = read();
boolean neg = (c == '-');
if (neg)
c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (neg)
return -ret;
return ret;
}
double ret = 0, div = 1;
byte c = read();
while (c <= ' ')
c = read();
boolean neg = (c == '-');
if (neg)
c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (c == '.')
while ((c = read()) >= '0' && c <= '9')
ret += (c - '0') / (div *= 10);
if (neg)
return -ret;
return ret;
}
bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
if (bytesRead == -1)
buffer[0] = -1;
}
if (bufferPointer == bytesRead)
fillBuffer();
return buffer[bufferPointer++];
}
if (din == null)
return;
din.close();
}
}
}
/*
5 6
20 30 10 50 40
2 31
1 2
2 31
3 11
2 20
2 50
*/
/*
5 6
10 10 10 10 10
1 3
1 5
1 3
3 11
1 4
2 11
*/
aW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuQml0U2V0OwppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci8vaW1wb3J0IGphdmEudXRpbC5NYXA7CgoKCgpjbGFzcyBURU1QTEVRIHsKc3RhdGljIGludCBhW107CnN0YXRpYyBCaXRTZXQgYnM7CnN0YXRpYyBpbnQgY291bnQ9MDsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgoJCWxvbmcgdGltZT1TeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKCQlSZWFkZXIgcj1uZXcgUmVhZGVyKCk7CgkJLy9SZWFkZXIgcj1uZXcgUmVhZGVyKCIvbWVkaWEvYW5raXQvU29mdHdhcmVzL0VDTElQU0UvU1BPSi9TUE9KIENMQVNTSUNBTC9zcmMvSW5wdXRUZW1wbGUudHh0Iik7CmludCBuPXIubmV4dEludCgpOwppbnQgcT1yLm5leHRJbnQoKTsKU3RyaW5nQnVpbGRlciBzYj1uZXcgU3RyaW5nQnVpbGRlcigpOwpQcmludFdyaXRlciBwcmZpbGU9bmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpOwovL1ByaW50V3JpdGVyIHByZmlsZT1uZXcgUHJpbnRXcml0ZXIoIi9tZWRpYS9hbmtpdC9Tb2Z0d2FyZXMvRUNMSVBTRS9TUE9KL1NQT0ogQ0xBU1NJQ0FML3NyYy9PdXRwdXRUZW1wbGUudHh0Iik7CiBhPW5ldyBpbnRbbisxXTsKaW50IGJbXT1uZXcgaW50W24rMV07Ci8vc2VndHJlZT1uZXcgaW50WzQqbl07CmJzPW5ldyBCaXRTZXQobisxKTsKSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBobT1uZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOwpmb3IoaW50IGk9MTtpPD1uO2krKyl7YVtpXT1yLm5leHRJbnQoKTsKYltpXT1hW2ldO30KQXJyYXlzLnNvcnQoYSwxLGEubGVuZ3RoKTsKZm9yKGludCBpPTE7aTw9bjtpKyspewppbnQgcG9zPWJpbmFyeVNlYXJjaChhLCBiW2ldKTsKaG0ucHV0KGksIHBvcyk7Cn0KCi8qZm9yKE1hcC5FbnRyeTxJbnRlZ2VyLCBJbnRlZ2VyPiBlbnRyeTpobS5lbnRyeVNldCgpKXsKU3lzdGVtLm91dC5wcmludGxuKGVudHJ5LmdldEtleSgpKyIgIitlbnRyeS5nZXRWYWx1ZSgpKTsKfQoqLwoKCmZvcihpbnQgaT0wO2k8cTtpKyspewoJaW50IGNob2ljZT1yLm5leHRJbnQoKTsKCWludCBudW1iZXI9ci5uZXh0SW50KCk7CglpZihjaG9pY2U9PTEpewoJCQoJCW51bWJlcj1obS5nZXQobnVtYmVyKTsKCWludAlidmFsPWFbbnVtYmVyXTsKCQkKCQlpbnQgaj1iaW5zZWFyY2hfcmlnaHRtb3N0KGEsIGJ2YWwsIG51bWJlciwgYS5sZW5ndGgtMSk7CgkJCgkJYVtqXSsrOwoJCQoJCQoJfQoJZWxzZSBpZihjaG9pY2U9PTIpewoJCWludCBhbnM9Ymluc2VhcmNoX2xlZnRtb3N0KGEsbnVtYmVyLDEsbik7CgkKCQlpZihhW2Fuc10+PW51bWJlcikKCQlzYi5hcHBlbmQoKG4tYW5zKzEpKyJcbiIpOwoJCWVsc2Ugc2IuYXBwZW5kKChuLWFucykrIlxuIik7CgkJCgl9CgllbHNlCgkJewoJCWludCBhbnM9Ymluc2VhcmNoX2xlZnRtb3N0KGEsbnVtYmVyLDEsbik7CgkJaWYoYVthbnNdPj1udW1iZXIpCgkJZm9yKGludCBqPWFucztqPGEubGVuZ3RoOysrailhW2pdLS07CgkJfQoJCgkvL1N5c3RlbS5vdXQucHJpbnRsbihpKTsKfQoJcHJmaWxlLndyaXRlKHNiLnRvU3RyaW5nKCkpOwoJU3lzdGVtLm91dC5wcmludGxuKChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKS10aW1lKS8xMDAwLjApOwoJcHJmaWxlLmZsdXNoKCk7CglwcmZpbGUuY2xvc2UoKTsKCX0KCXB1YmxpYyBzdGF0aWMgaW50IGJpbmFyeVNlYXJjaChpbnQgYVtdLGludCB2YWwpewoJCWludCBsb3c9MCxoaWdoPWEubGVuZ3RoLTEsbWlkPShsb3crKChoaWdoLWxvdysxKT4+MSkpOwoJCXdoaWxlKGxvdzxoaWdoKXsKCQkJbWlkPShsb3crKChoaWdoLWxvdysxKT4+MSkpOwoJCQlpZihhW21pZF0+PXZhbCloaWdoPW1pZC0xOwoJCQllbHNlIGxvdz1taWQ7CgkJfQoJCW1pZD0obG93KygoaGlnaC1sb3crMSk+PjEpKTsKCQlpZihhW21pZF08dmFsKXsKCQkJaW50IGo7CgkJCWZvciggaj1taWQrMTthW2pdIT12YWw7aisrKTsKCQkJbWlkPWo7CgkJfQoJCWlmKCFicy5nZXQobWlkKSl7CgkJCWJzLnNldChtaWQpOwoJCQlyZXR1cm4gbWlkOwoJCX0KCQllbHNlewoJCQlpbnQgajsKCQkJZm9yKCBqPW1pZDtqPjAgJiYgYVtqXT09dmFsICYmICFicy5nZXQoaik7ai0tKTsKCQkJaWYoaiE9bWlkKXJldHVybiBqOwoJCQllbHNlewoJCQkJaisrOwoJCQkJZm9yKDtqPGEubGVuZ3RoICYmIGFbal09PXZhbDtqKyspewoJCQkJCWlmKCFicy5nZXQoaikpewoJCQkJCQlicy5zZXQoaik7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBqOwoJCQl9CgkJCQoJCX0KCX0KCXB1YmxpYyBzdGF0aWMgaW50IGJpbnNlYXJjaF9yaWdodG1vc3QoaW50IGFbXSxpbnQgdmFsLGludCBsZWZ0LGludCByaWdodCl7CgkJaWYobGVmdD09cmlnaHQpcmV0dXJuIGxlZnQ7CgkJaW50IG1pZD0obGVmdCtyaWdodCsxKT4+MTsKCQkJaWYoYVttaWRdPnZhbClyZXR1cm4gYmluc2VhcmNoX3JpZ2h0bW9zdCgJYSwgdmFsLCBsZWZ0LCBtaWQtMSk7CgkJCXJldHVybiBiaW5zZWFyY2hfcmlnaHRtb3N0KGEsIHZhbCwgbWlkLCByaWdodCk7Cgl9CglwdWJsaWMgc3RhdGljIGludCBiaW5zZWFyY2hfbGVmdG1vc3QoaW50IGFbXSxpbnQgdmFsLGludCBsZWZ0LGludCByaWdodCl7CgkgICAgaWYobGVmdD09cmlnaHQpIHJldHVybiBsZWZ0OwoJICAgaW50IG1pZCA9IChsZWZ0K3JpZ2h0KT4+MTsKCSAgICBpZihhW21pZF0gPCB2YWwpCgkgICAgICAgIHJldHVybiBiaW5zZWFyY2hfbGVmdG1vc3QoYSx2YWwsbWlkKzEscmlnaHQpOwoJICAgIGVsc2UKCSAgICAgICAgcmV0dXJuIGJpbnNlYXJjaF9sZWZ0bW9zdChhLHZhbCxsZWZ0LG1pZCk7Cgl9CgpzdGF0aWMgY2xhc3MgUmVhZGVyIHsKCWZpbmFsIHByaXZhdGUgaW50IEJVRkZFUl9TSVpFID0gMSA8PCAxNjsKCXByaXZhdGUgRGF0YUlucHV0U3RyZWFtIGRpbjsKCXByaXZhdGUgYnl0ZVtdIGJ1ZmZlcjsKCXByaXZhdGUgaW50IGJ1ZmZlclBvaW50ZXIsIGJ5dGVzUmVhZDsKCQoJcHVibGljIFJlYWRlcigpIHsKCQlkaW4gPSBuZXcgRGF0YUlucHV0U3RyZWFtKFN5c3RlbS5pbik7CgkJYnVmZmVyID0gbmV3IGJ5dGVbQlVGRkVSX1NJWkVdOwoJCWJ1ZmZlclBvaW50ZXIgPSBieXRlc1JlYWQgPSAwOwoJfQoJCglwdWJsaWMgUmVhZGVyKFN0cmluZyBmaWxlX25hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJZGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVfbmFtZSkpOwoJCWJ1ZmZlciA9IG5ldyBieXRlW0JVRkZFUl9TSVpFXTsKCQlidWZmZXJQb2ludGVyID0gYnl0ZXNSZWFkID0gMDsKCX0KCQoJcHVibGljIFN0cmluZyByZWFkTGluZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzY0XTsKCQlpbnQgY250ID0gMCwgYzsKCQl3aGlsZSAoKGMgPSByZWFkKCkpICE9IC0xKSB7CgkJCWlmIChjID09ICdcbicpCgkJCQlicmVhazsKCQkJYnVmW2NudCsrXSA9IChieXRlKSBjOwoJCX0KCQlyZXR1cm4gbmV3IFN0cmluZyhidWYsIDAsIGNudCk7Cgl9CgkKCXB1YmxpYyBpbnQgbmV4dEludCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJaW50IHJldCA9IDA7CgkJYnl0ZSBjID0gcmVhZCgpOwoJCXdoaWxlIChjIDw9ICcgJykKCQkJYyA9IHJlYWQoKTsKCQlib29sZWFuIG5lZyA9IChjID09ICctJyk7CgkJaWYgKG5lZykKCQkJYyA9IHJlYWQoKTsKCQlkbyB7CgkJCXJldCA9IHJldCAqIDEwICsgYyAtICcwJzsKCQl9IHdoaWxlICgoYyA9IHJlYWQoKSkgPj0gJzAnICYmIGMgPD0gJzknKTsKCQlpZiAobmVnKQoJCQlyZXR1cm4gLXJldDsKCQlyZXR1cm4gcmV0OwoJfQoJCglwdWJsaWMgbG9uZyBuZXh0TG9uZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgkJbG9uZyByZXQgPSAwOwoJCWJ5dGUgYyA9IHJlYWQoKTsKCQl3aGlsZSAoYyA8PSAnICcpCgkJCWMgPSByZWFkKCk7CgkJYm9vbGVhbiBuZWcgPSAoYyA9PSAnLScpOwoJCWlmIChuZWcpCgkJCWMgPSByZWFkKCk7CgkJZG8gewoJCQlyZXQgPSByZXQgKiAxMCArIGMgLSAnMCc7CgkJfSB3aGlsZSAoKGMgPSByZWFkKCkpID49ICcwJyAmJiBjIDw9ICc5Jyk7CgkJaWYgKG5lZykKCQkJcmV0dXJuIC1yZXQ7CgkJcmV0dXJuIHJldDsKCX0KCQoJcHVibGljIGRvdWJsZSBuZXh0RG91YmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKCQlkb3VibGUgcmV0ID0gMCwgZGl2ID0gMTsKCQlieXRlIGMgPSByZWFkKCk7CgkJd2hpbGUgKGMgPD0gJyAnKQoJCQljID0gcmVhZCgpOwoJCWJvb2xlYW4gbmVnID0gKGMgPT0gJy0nKTsKCQlpZiAobmVnKQoJCQljID0gcmVhZCgpOwoJCWRvIHsKCQkJcmV0ID0gcmV0ICogMTAgKyBjIC0gJzAnOwoJCX0gd2hpbGUgKChjID0gcmVhZCgpKSA+PSAnMCcgJiYgYyA8PSAnOScpOwoJCWlmIChjID09ICcuJykKCQkJd2hpbGUgKChjID0gcmVhZCgpKSA+PSAnMCcgJiYgYyA8PSAnOScpCgkJCQlyZXQgKz0gKGMgLSAnMCcpIC8gKGRpdiAqPSAxMCk7CgkJaWYgKG5lZykKCQkJcmV0dXJuIC1yZXQ7CgkJcmV0dXJuIHJldDsKCX0KCQoJcHJpdmF0ZSB2b2lkIGZpbGxCdWZmZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCWJ5dGVzUmVhZCA9IGRpbi5yZWFkKGJ1ZmZlciwgYnVmZmVyUG9pbnRlciA9IDAsIEJVRkZFUl9TSVpFKTsKCQlpZiAoYnl0ZXNSZWFkID09IC0xKQoJCQlidWZmZXJbMF0gPSAtMTsKCX0KCQoJcHJpdmF0ZSBieXRlIHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCWlmIChidWZmZXJQb2ludGVyID09IGJ5dGVzUmVhZCkKCQkJZmlsbEJ1ZmZlcigpOwoJCXJldHVybiBidWZmZXJbYnVmZmVyUG9pbnRlcisrXTsKCX0KCQoJcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewoJCWlmIChkaW4gPT0gbnVsbCkKCQkJcmV0dXJuOwoJCWRpbi5jbG9zZSgpOwoJfQp9Cgp9Ci8qCjUgNgoyMCAzMCAxMCA1MCA0MAoyIDMxCjEgMgoyIDMxCjMgMTEKMiAyMAoyIDUwCiovCi8qCjUgNgoxMCAxMCAxMCAxMCAxMAoxIDMKMSA1CjEgMwozIDExCjEgNAoyIDExCiov