#include <cstdio>
const int AI_SIZE = 400066;
int n,m;
int v[AI_SIZE];
inline int max ( int a, int b ) { if (a > b) return a; else return b; }
inline int min ( int a, int b ) { if (a < b) return a; else return b; }
void insert ( int cint, int cs, int cd, int s, int d, int val ) {
if (cs == cd) {
v[cint] = val;
return;
}
int mid = (cs+cd)/2;
if (s <= mid) insert(2*cint,cs,mid,s,min(d,mid),val);
if (d > mid) insert(2*cint+1,mid+1,cd,max(s,mid+1),d,val);
v[cint] = max(v[2*cint],v[2*cint+1]);
}
int query ( int cint, int cs, int cd, int s, int d ) {
if (s == cs && d == cd) return v[cint];
int r = 0;
int mid = (cs+cd)/2;
if (s <= mid) r = max(r, query(2*cint,cs,mid,s,min(d,mid)));
if (d > mid) r = max(r, query(2*cint+1,mid+1,cd,max(s,mid+1),d));
return r;
}
int main() {
freopen("arbint.in","rt",stdin);
freopen("arbint.out","wt",stdout);
scanf("%d %d",&n,&m);
for (int i = 1; i <= n; ++i) {
int a;
scanf("%d",&a);
insert(1,1,n,i,i,a);
}
for (int i = 0; i < m; ++i) {
int cmd,a,b;
scanf("%d %d %d",&cmd,&a,&b);
if (cmd == 0) {
printf("%d\n",query(1,1,n,a,b));
} else {
insert(1,1,n,a,a,b);
}
}
return 0;
}