#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int nmax=100000;
int n,m,Max;
int a[nmax+5],aint[4*nmax];
void read(){
fin>>n>>m;
for(int i=1;i<=n;++i)
fin>>a[i];
}
void update(int i,int left,int right,int a,int b){
if(left==right){
aint[i]=b;
return;
}
int mid=(left+right)/2;
if(a<=mid)
update(2*i,left,mid,a,b);
else
update(2*i+1,mid+1,right,a,b);
aint[i]=max(aint[2*i],aint[2*i+1]);
}
void build(){
for(int i=1;i<=n;++i)
update(1,1,n,i,a[i]);
}
void query(int i,int left,int right,int a,int b){
if(a<=left && right<=b){
Max=max(Max,aint[i]);
return;
}
if(a>right || b<left)
return;
int mid=(left+right)/2;
query(2*i,left,mid,a,b);
query(2*i+1,mid+1,right,a,b);
}
void solve(){
while(m--){
int op,a,b;
fin>>op>>a>>b;
if(op==1)
update(1,1,n,a,b);
if(op==0){
Max=0;
query(1,1,n,a,b);
fout<<Max<<"\n";
}
}
}
int main()
{
read();
build();
solve();
return 0;
}