#include<bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') {
f = -1;
}
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
inline void write(int x) {
if (x < 0)
putchar('-'), x = -x;
if (x > 9) {
write(x / 10);
}
putchar(x % 10 + '0');
}
int ord[8010];
int n, q;
struct node {
int val;
int id;
} num[8010];
bool operator>(node a, node b) {
return a.val != b.val ? a.val > b.val : a.id > b.id;
}
bool operator<(node a, node b) {
return a.val != b.val ? a.val < b.val : a.id < b.id;
}
void updataord() {
for (int i = 1; i <= n; i++)
ord[num[i].val] = i;
}
void updatanode(int x, int v) {
num[x].val = v;
for (int i = ord[x]; i < n; i++) {
if (num[i] > num[i + 1])
swap(num[i], num[i + 1]);
}
for (int i = ord[x]; i > 1; i--) {
if (num[i] < num[i - 1])
swap(num[i], num[i - 1]);
}
updataord();
}
int main() {
n = read();
q = read();
for (int i = 1; i <= n; i++) {
num[i].val = read();
num[i].id = i;
}
sort(num + 1, num + n + 1);
updataord();
for (int i = 1; i <= q; i++) {
int opt;
opt = read();
if (opt == 1) {
int x, v;
x = read();
v = read();
updatanode(x, v);
} else {
int x;
x = read();
write(ord[x]);
puts("");
}
}
return 0;
}