using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int a[10010],b[10010],n,Q,T,c,x,y,s,f[10010];
struct node {
int x,y;
};
int read() {
int f=1,x=0;
char ch=getchar();
for(; ch<'0'||ch>'9'; ch=getchar()) if (ch=='-') f=-1;
for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-48;
return x*f;
}
int main() {//按从小到大进行排序
//freopen("sort.in","r",stdin);
//freopen("sort.out","w",stdout);
n=read();
Q=read();
for(int i=1; i<=n; i++) a[i]=read();
for(int i=1; i<=n; i++) {
for(int j=1; j<=i-1; j++)
if (a[i]>=a[j]) f[i]++;
for(int j=i+1; j<=n; j++)
if (a[i]>a[j]) f[i]++;
f[i]++;
}
for(int T=1; T<=Q; T++) {
c=read();
if (c==1) {
x=read();
y=read();
// a[x]=y;
f[x]=1;
for(int i=1;i<=x-1;i++)
if (y>=a[i]) f[x]++;
for(int i=x+1;i<=n;i++)
if (y>a[i]) f[x]++;
for(int i=1;i<=x-1;i++){
if ((a[x]>=a[i])&&(y<a[i]))f[i]++;
else if (a[x]<a[i]&&(y>=a[i])) f[i]--;
}
for(int i=x+1;i<=n;i++){
if (a[x]>a[i]&&(y<=a[i])) f[i]++;
else
if (a[x]<=a[i]&&(y>a[i])) f[i]--;
}
a[x]=y;
}
if (c==2) {
x=read();
printf("%d\n",f[x]);
}
}
return 0;
}