#include <cstdio>
#include <algorithm>
using namespace std;
int maxi[4*100001+66];
int n,m;
int val, pos, maxim, inceput, sfarsit;
void actualizare(int nod, int st, int dr){
if(st == dr){
maxi[nod] = val;
return;
}
else{
int mij = (st + dr)/2;
if(pos <= mij) actualizare(2 * nod, st, mij);
else actualizare (2 * nod + 1, mij + 1, dr);
maxi[nod] = max( maxi[2 * nod], maxi[2 * nod + 1]);
}
}
void interogare(int nod, int st, int dr){
if(inceput <= st && dr <= sfarsit){
if(maxim < maxi[nod]) maxim = maxi[nod];
return ;
}
int mij = (st + dr)/2;
if ( inceput <= mij ) interogare(2*nod,st,mij);
if ( mij < sfarsit ) interogare(2*nod+1,mij+1,dr);
}
int main (){
int i,j,x,op,a,b;
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d %d", &n, &m);
for(i = 1; i <= n ; ++i) {
scanf("%d", &x);
pos = i;
val = x;
actualizare(1,1,n);
}
for(i = 1; i <= m; ++i){
scanf("%d %d %d", &op,&a, &b);
if(x == 1){
maxim = -1;
inceput = a,
sfarsit = b;
interogare(1,1,n);
printf("%d\n", maxim);
}
else{
pos =a, val = b;
actualizare(1,1,n);
}
}
}