#include <cstdio>
#define DIM 100010
using namespace std;
int A[4*DIM];
int n, m, i, a, b, sol, x, t, p, v;
inline int maxim(int a, int b) {
return ( a>b ? a : b );
}
void update(int nod, int st, int dr) {
if (st == dr) {
A[nod] = v;
return;
}
int m = (st + dr)/2;
if (p <= m)
update(2*nod, st, m);
if (p>m)
update(2*nod+1, m+1, dr);
A[nod] = maxim(A[2*nod], A[2*nod+1]);
}
void query(int nod, int st, int dr) {
if (a<=st && b>=dr){
sol = maxim(sol, A[nod]);
return;
}
int m = (st+dr)/2;
if (a<=m)
query(2*nod, st, m);
if (b > m)
query(2*nod+1, m+1, dr);
}
int main() {
FILE *fin = fopen("arbint.in", "r");
FILE *fout = fopen("arbint.out", "w");
fscanf(fin,"%d %d",&n, &m);
for (i=1;i<=n;i++) {
fscanf(fin,"%d",&x);
p = i;
v = x;
update(1, 1, n);
}
for (i=1;i<=m;i++) {
fscanf(fin,"%d %d %d",&t, &a, &b);
if (t == 0) {
sol = 0;
query(1,1,n);
fprintf(fout,"%d\n", sol);
}
else {
p = a;
v = b;
update(1,1,n);
}
}
return 0;
}