#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;
long long v[100003],arbore[200005],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()
{
ifstream in ("arbint.in");
ofstream out ("arbint.out");
// FILE*in =fopen("arbint.in","r");
// FILE*out=fopen("arbint.out","w");
// fscanf(in,"%d%d",&n,&m);
in>>n>>m;
for(int j=1;j<=n;j++){
//fscanf(in,"%d",&v[j]);
in>>v[j];
}
facem_arborele(1,1,n);
maximul=0;
while(m!=0){
//fscanf(in,"%d",&x);
in>>x;
m--;
if(x==0){
maximul=0;
// fscanf(in,"%d%d",&c,&d);
in>>c>>d;
care_imaximul(1,1,n,c,d);
//fprintf(out,"%d\n",maximul);
out<<maximul<<'\n';
}
if(x==1){
//fscanf(in,"%d%d",&c,&d);
in>>c>>d;
v[c]=d;
actualizare(1,1,n,c);
}
}
in.close();
out.close();
}