#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m;
int arbore[4000];
int maxi;
void query(int nod, int a, int b, int st, int dr){
if(st<=a && b<=dr){
if(maxi < arbore[nod]){
maxi = arbore[nod];
}
return;
}
int mij;
mij = (a+b)/2;
if(st<=mij){
query(nod*2,a,mij,st,dr);
}
if(mij<dr){
query(nod*2+1,mij+1,b,st,dr);
}
}
void update(int nod, int val, int a, int b, int poz){
if(a==b){
arbore[nod]=val;
return;
}
int mij;
mij = (a+b)/2;
if(poz<=mij){
update(nod*2,val,a,mij,poz);
}else{
update(nod*2+1,val,mij+1,b,poz);
}
if(arbore[nod*2] > arbore[nod*2+1]){
arbore[nod] = arbore[nod*2];
}else{
arbore[nod] = arbore[nod*2+1];
}
}
int main(){
int val, operatie, a, b;
f>>n>>m;
for(int i=1;i<=n;i++){
f>>val;
update(1,val,1,n,i);
}
for(int i=0;i<m;i++){
f>>operatie>>a>>b;
if(operatie==0){
maxi=0;
query(1,1,n,a,b);
g<<maxi<<"\n";
}
if(operatie==1){
update(1,b,1,n,a);
}
}
return 0;
}