#include<iostream>
using namespace std;
#define N 10010
/*p[i]表示排序后i位置的数在原数组p[i]位置
np[i]表示原数组i位置的数在排序后的数组np[i]*/
int a[N],p[N],np[N],n,q;
//向前调整
void forward(int k){
for(int i=k;i>1&&a[i]<=a[i-1];i--){
//如果相等,需要判断原来位置的前后关系,从而保证插入排序的稳定性,即原来在前的还是在前
if(a[i]==a[i-1]&&p[i]>p[i-1]){
continue;
}
swap(a[i], a[i-1]);
np[p[i]]=i-1;
np[p[i-1]]=i;
swap(p[i],p[i-1]);
}
}
//向后调整
void backward(int k){
for(int i=k;i<n&&a[i]>=a[i+1];i++){
//如果相等,需要判断原来位置的前后关系,从而保证插入排序的稳定性,即原来在后面的还是在后面
if(a[i]==a[i+1]&&p[i]<p[i+1]){
continue;
}
swap(a[i],a[i+1]);
np[p[i]]=i+1;
np[p[i+1]]=i;
swap(p[i],p[i+1]);
}
}
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
np[i]=p[i]=i;
}
//插入排序
for(int i=2; i<=n;i++){
forward(i);
}
while(q--){
int op,x,v;
scanf("%d%d", &op, &x);
if(op == 1){
scanf("%d",&v);
int k=np[x];
a[k]=v;
//更新后,向前或向后进行调整
forward(k);
backward(k);
}
else{
printf("%d\n", np[x]);
}
}
}
/**************************************************************
Problem: 2402
User: admin
Language: C++
Result: Accepted
Time:1506 ms
Memory:2196 kb
****************************************************************/