#include <bits/stdc++.h>
#define N_MAX 100001
using namespace std;
int N, M, arbint[4 * N_MAX];
void update(int val, int pos, int st = 1, int dr = N, int nod = 1)
{
if(st == dr)
{
arbint[nod] = val;
return;
}
int mid = (st + dr)/2;
if(pos <= mid)
update(val, pos, st, mid, 2*nod);
else
update(val, pos, mid + 1, dr, 2*nod + 1);
arbint[nod] = max(arbint[2*nod], arbint[2*nod + 1]);
}
int query(int a, int b, int st = 1, int dr = N, int nod = 1)
{
if(a <= st && dr <= b)
return arbint[nod];
int mid = (st + dr)/2, MAX = -1;
if(a <= mid)
MAX = max(MAX, query(a, b, st, mid, 2*nod));
if(b > mid)
MAX = max(MAX, query(a, b, mid + 1, dr, 2*nod + 1));
return MAX;
}
int main()
{
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin >> N >> M;
for(int x, i = 1; i <= N; ++i)
{
fin >> x;
update(x, i);
}
for(int c, a, b, i = 1; i <= M; ++i)
{
fin >> c >> a >> b;
if(c & 1) update(b, a);
else fout << query(a, b) << '\n';
}
}