#include <iostream>
#include <fstream>
using namespace std;
int N,arr[100001],sgt[100001],V,E,op,num1,num2,Q;
inline void buildsgt(int l,int r,int curr)
{
if(l==r){
sgt[curr]=arr[r];
return;
}
int mid=l+(r-l)/2;
buildsgt(l,mid,curr*2);
buildsgt(mid+1,r,curr*2+1);
sgt[curr]=max(sgt[curr*2],sgt[curr*2+1]);
}
inline int query(int l,int r,int curr,int x,int y)
{
if(y<l || x>r )
return -19999999;
if(l>=x && r<=y)
return sgt[curr];
int mid=l+(r-l)/2;
int sol=query(l,mid,curr*2,x,y);
int sol2=query(mid+1,r,curr*2+1,x,y);
return max(sol,sol2);
}
inline void update(int l,int r,int curr,int x,int res)
{
if(x<l || x>r)
return;
if(l==r){
sgt[curr]=res;
return;
}
int mid=l+(r-l)/2;
update(l,mid,curr*2,x,res);
update(mid+1,r,curr*2+1,x,res);
sgt[curr]=max(sgt[curr*2],sgt[curr*2+1]);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
cin>>V>>Q;
for(int i=1;i<=V;i++)
cin>>arr[i];
//for(int i=1;i<=20;i++)
// cout<<sgt[i];
buildsgt(1,V,1);
// for(int i=1;i<=20;i++)
//cout<<sgt[i];
while(Q--)
{
cin>>op>>num1>>num2;
if(op==0)
cout<<query(1,V,1,num1,num2)<<"\n";
if(op==1)
update(1,V,1,num1,num2);
}
return 0;
}