#include <cstdio>
#define DIM 100010
using namespace std;
int A[4*DIM];
int n, m, i, a, b, sol, x, t;
inline int maxim(int a, int b) {
return ( a>b ? a : b );
}
void update(int nod, int st, int dr, int p, int v) {
if (st == dr) {
A[nod] = v;
return;
}
int m = ((st + dr)>>1);
if (p <= m)
update(nod<<1, st, m, p, v);
if (p>m)
update((nod<<1)+1, m+1, dr, p, v);
A[nod] = maxim(A[nod<<1], A[(nod<<1)+1]);
}
void query(int nod, int st, int dr, int a, int b) {
if (a<=st && b>=dr){
sol = maxim(sol, A[nod]);
return;
}
int m = ((st+dr)>>1);
if (a<=m)
query(nod<<1, st, m, a, b);
if (b > m)
query((nod<<1)+1, m+1, dr, a, b);
}
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);
update(1, 1, n, i, x);
}
for (i=1;i<=m;i++) {
fscanf(fin,"%d %d %d",&t, &a, &b);
if (t == 0) {
sol = 0;
query(1,1,n,a,b);
fprintf(fout,"%d\n", sol);
}
else
update(1,1,n,a,b);
}
return 0;
}