#include <iostream>
#include <cstdio>
using namespace std;
long long v[1000050],arbore[2000050],k,n,maxim,m,maximul,c,d,x,k2;
void care_imaximul(int l,int st,int dr,int a ,int b){
if(l<=k){
// if(a==st && b==dr){
// maximul=arbore[l];
//}
if(a<=st && dr<=b){
if(arbore[l]>maximul){
maximul=arbore[l];
}
}
else{
if(b<st || a>dr){
}
else{
care_imaximul(2*l,st,(st+dr)/2,a,b);
care_imaximul(2*l+1,(st+dr)/2+1,dr,a,b);
}
}
}}
void facem_arborele(int l,int a,int b){
k++;
if(a==b){
arbore[l]=v[a];
}
if(a!=b){
facem_arborele(2*l,a,(a+b)/2);
facem_arborele(2*l+1,(a+b)/2+1,b);
if(arbore[2*l]>arbore[2*l+1]){
arbore[l]=arbore[2*l];
}
else{
arbore[l]=arbore[2*l+1];
}
}
}
void actualizare(int l,int st,int dr, int a){
if(st!=dr){
if(a<=(st+dr)/2){
actualizare(2*l,st,(st+dr)/2,a);
}
else{actualizare(2*l+1,(st+dr)/2+1,dr,a);}}
if(st==dr){
arbore[l]=v[a];}
else{
if(arbore[2*l]>arbore[2*l+1]){
arbore[l]=arbore[2*l];
}
else{
arbore[l]=arbore[2*l+1];
}
}
}
int main()
{
FILE*in =fopen("arbint.in","r");
FILE*out=fopen("arbint.out","w");
fscanf(in,"%d%d",&n,&m);
for(int j=1;j<=n;j++){
fscanf(in,"%d",&v[j]);
}
facem_arborele(1,1,n);
maximul=0;
while(m!=0){
fscanf(in,"%d",&x);
m--;
if(x==0){
maximul=0;
fscanf(in,"%d%d",&c,&d);
care_imaximul(1,1,n,c,d);
fprintf(out,"%d\n",maximul);
}
if(x==1){
fscanf(in,"%d%d",&c,&d);
v[c]=d;
actualizare(1,1,n,c);
}
}
fclose(in);
fclose(out);
}