#include<iostream>
#include<algorithm>
using namespace std;
int n, Q, a[8010], flag = 0;
struct stu {
int num, id;
}b[8010];
int cmp(stu a, stu b) { // 返回 0 说明要把 a 和 b 交换。
if(a.num != b.num) {
return a.num < b.num;
} else {
return a.id < b.id;
}
}
// 以上不需要修改,只要修改下面的部分。
int main() {
cin >> n >> Q; // 读入 n 和 Q
for(long long i=1;i<=n;i++) { // 读入 n 个数组 a[i]
cin>>a[i];
}
for(long long t=1;t<=Q;t++) { // t 从 1 到 Q
int opr, x, v;
// 读入 opr,也就是操作类型
cin>>opr;
if(opr==1) { // 如果操作类型是 1
// 读入 x 和 v
cin>>x>>v;
// 将 a 的数组的第 x 个元素的值设置为 v
a[x]=v;
// flag 开关关掉
flag=0;
}
if(opr==2) { // 如果操作类型是 2
// 读入 x
cin>>x;
if(flag==0) { //如果开关是关的
for(long long i=1;i<=n;i+=1)
{ // 将 a 数组复制进 b 数组
// b[i] 元素的 num 设置为 a[i]
b[i].num=a[i];
// b[i] 元素的 id 设置为 i
b[i].id=i;
}
// 对数组 b 用 sort 排序,别忘了 cmp
sort(b+1,b+n+1,cmp);
// 把开关打开。
flag=1;
}
for(long long i=1;i<=n;i++) { // 枚举 b 的每一个元素
if(b[i].id==x) { // 如果 b[i] 的 id 的值就是要询问的 x
// 输出 b[i] 元素的位置编号,也就是排序后第几个
cout<<i<<endl;
break;
}
}
}
}
return 0;
}