#include <fstream>
#define DIM 100002
using namespace std;
int n,m,v[DIM],segm[5*DIM];
void build(int node,int x,int y) {
if(x==y) {
segm[node]=v[x];
return;
}
int mid=(x+y)/2;
build(2*node,x,mid);
build(2*node+1,mid+1,y);
segm[node]=max(segm[2*node],segm[2*node+1]);
}
void update(int node,int x,int y,int a) {
if(x==y) {
segm[node]=v[a];
return;
}
int mid=(x+y)/2;
if(a<=mid)
update(2*node,x,mid,a);
else
update(2*node+1,mid+1,y,a);
segm[node]=max(segm[2*node],segm[2*node+1]);
}
int query(int node,int x,int y,int a,int b) {
if(x>=a&&y<=b)
return segm[node];
int mid=(x+y)/2,sol=-1;
if(a<=mid)
sol=query(2*node,x,mid,a,b);
if(b>mid)
sol=max(sol,query(2*node+1,mid+1,y,a,b));
return sol;
}
int main()
{
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>v[i];
build(1,1,n);
int a,b,c;
for(int i=1;i<=m;i++) {
fin>>a>>b>>c;
if(a==0) {
fout<<query(1,1,n,b,c)<<'\n';
}
else {
v[b]=c;
update(1,1,n,b);
}
}
return 0;
}