using namespace std;
#include <cstdio>
#include <algorithm>
#define maxn 100001
int H[4*maxn], n,m,sol,i,v,t,p,q;
inline void update(int node, int st, int dr, int i, int v)
{ if(st>=dr) {H[node]=v; return;}
int m=(st+dr)/2;
if(i<=m) update(2*node, st, m, i, v);
else update(2*node+1, m+1, dr, i, v);
H[node]=max(H[2*node], H[2*node+1]);
}
inline int query(int node, int st, int dr, int i, int j)
{int mij,sol=0;
if(i<=st && dr<=j) return H[node];
mij=(st+dr)/2;
if(i<=mij) sol=max(sol,query(2*node, st, mij, i,j));
if(j>mij) sol=max(sol,query(2*node+1, mij+1,dr, i, j));
return sol;
}
int main()
{ freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d\n", &n, &m);
for(i=1; i<=n; i++) {scanf("%d", &v); update(1, 1, n, i, v);};
while(m--)
{scanf("%d %d %d\n", &t,&p, &q);
if(t==0) printf("%d\n", query(1, 1, n, p, q));
else update(1, 1, n, p, q);
}
return 0;
}