#include <bits/stdc++.h>
using namespace std;
int v[1<<18]={0};
void update(int st, int dr, int nod, int val, int pos){
if(st == dr)
v[nod] = val;
else{
int m = (st+dr)/2;
if(pos <= m)
update(st, m, nod*2, val, pos);
else
update(m+1, dr, nod*2+1, val, pos);
v[nod] = max(v[nod*2], v[nod*2+1]);
}
}
int query(int st, int dr, int nod, int a, int b){
if(a <= st && b <= dr)
return v[nod];
else{
int m = (st+dr)/2;
int m1 = -1, m2 = -1;
if(a <= m)
m1 = query(st, m, nod*2, a, b);
if(m < b)
m2 = query(m+1, dr, nod*2+1, a, b);
return max(m1, m2);
}
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, cr, i, val, a, b;
f >> n >> m;
for(i=1; i<=n; i++){
f >> val;
update(1, n, 1, val, i);
}
for(i=1; i<=m; i++){
f >> cr >> a >> b;
if(!cr)
g << query(1, n, 1, a, b) << "\n";
else
update(1, n, 1, b, a);
}
g << "\n";
}