#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
vector<int> arb(8000000);
int update(int st,int dr, int poz, int val,int nod){
if(st==dr){
arb[nod]=val;
return arb[nod];
}
int mij=(st+dr)/2;
if(poz<=mij) arb[nod]=max(update(st,mij,poz,val,nod*2),arb[nod*2+1]);
else arb[nod]=max(arb[nod*2],update(mij+1,dr,poz,val,nod*2+1));
return arb[nod];
}
int query(int st,int dr,int nod,int p1,int p2){
if(p1>p2)return 0;
int mij=(st+dr)/2;
if(st==p1&&dr==p2) return arb[nod];
return max(query(st,mij,nod*2,p1,min(mij,p2)),query(mij+1,dr,nod*2+1,max(p1,mij+1),p2));
}
int main(){
int n,m;
in>>n>>m;
for(int i=1;i<=n;i++){
int nr;
in>>nr;
update(1,n,i,nr,1);
}
for(int i=0;i<m;i++){
int a,b,c;
in>>c>>a>>b;
if(c==1) update(1,n,a,b,1);
else {
out<<query(1,n,1,a,b)<<"\n";
}
}
}