# include <stdio.h>
# define dim 100001
int N, M;
int Arb[4*dim+66];
int start, finish, Val, Pos, maxim;
int Maxim(int a, int b) {
if (a>b) return a;
return b;
}
void Upd(int nod, int st, int dr)
{
int mij;
if (st==dr) Arb[nod] = Val;
else {
mij = (st+dr)/2;
if (Pos<=mij) Upd(2*nod,st,mij);
else Upd(2*nod+1,mij+1,dr);
Arb[nod]=Maxim(Arb[2*nod], Arb[2*nod+1]);
}
}
void Query(int nod, int st, int dr)
{
if ( start <= st && dr <= finish ){
if ( maxim < Arb[nod] ) maxim = Arb[nod];
return;
}
int mij = (st+dr)/2;
if ( start <= mij ) Query(2*nod,st,mij);
if ( mij < finish ) Query(2*nod+1,mij+1,dr);
}
int main()
{
int op, A, B,i;
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d %d", &N, &M);
for (i = 1; i <= N; i++ ){
scanf("%d", &Val);
Pos = i;
Upd(1,1,N);
}
for (i = 1; i <= M; i++ ){
scanf("%d %d %d", &op, &A, &B);
if ( op == 0 ){
maxim=-1;
start=A, finish=B;
Query(1,1,N);
printf("%d\n", maxim);
}
else {
Pos = A, Val = B;
Upd(1,1,N);
}
}
return 0;
}