#include <stdio.h>
#define MAX 100000
int v[MAX];
int aint[4 * MAX];
int lLim, rLim;
void build(int l, int r, int loc){
int lSon, rSon, mid;
if(l==r){
aint[loc]=v[l];
return;
}
mid=(l+r)/2;
lSon=loc+1;
rSon=loc+2*(mid-l+1);
build(l, mid, lSon);
build(mid + 1, r, rSon);
if(aint[rSon]>aint[lSon])
aint[loc]=aint[rSon];
else
aint[loc]=aint[lSon];
}
int calcm(int l, int r, int loc) {
int lMax, rMax, lSon, rSon, mid;
if( lLim<=l && r<=rLim){
return aint[loc];
}
mid=(l+r)/2;
lSon=loc+1;
rSon=loc+2*(mid-l+1);
lMax=rMax=0;
if(lLim<=mid){
lMax=calcm(l,mid,lSon);
}
if(rLim>mid){
rMax=calcm(mid+1,r,rSon);
}
if(lMax>rMax)
return lMax;
return rMax;
}
void update(int pos, int val, int loc, int l, int r){
int lSon, rSon, mid;
if(l==r){
aint[loc]=val;
return;
}
mid=(l+r)/2;
lSon=loc+1;
rSon=loc+2*(mid-l+1);
if(mid>=pos)
update(pos,val,lSon,l,mid);
else
update(pos,val,rSon,mid+1,r);
if(aint[rSon]>aint[lSon])
aint[loc]=aint[rSon];
else
aint[loc]=aint[lSon];
}
int main() {
FILE *fin,*fout;
fin=fopen("arbint.in","r");
fout=fopen("arbint.out","w");
int n, m, q, a, b, i;
fscanf(fin,"%d%d",&n,&m);
for(i=0;i<n;i++)
fscanf(fin,"%d",&v[i]);
build(0,n-1,0);
while(m--){
fscanf(fin,"%d%d%d",&q,&a,&b);
a--;
if(q==0){
b--;
lLim=a;
rLim=b;
fprintf(fout,"%d\n",calcm(0,n-1,0));
}else{
v[a]=b;
update(a,b,0,0,n-1);
}
}
fclose(fin);
fclose(fout);
return 0;
}