#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int nm=100000,nm2=2*(131072+100);
int v[nm+5];
int sol[nm2+5];
int n,m;
int p,a,b;
int len;
void build(int st,int dr,int poz)
{
if(st==dr)
{
sol[poz]=v[st];
return;
}
int med=(st+dr)/2;
build(st,med,2*poz+1);
build(med+1,dr,2*poz+2);
sol[poz]=max(sol[2*poz+1],sol[2*poz+2]);
}
int slove(int a,int b,int st,int dr,int poz)
{
if(a<=st and dr<=b)
return sol[poz];
if(dr<a or b<st)
return -1e9;
int med=(st+dr)/2;
return max(slove(a,b,st,med,2*poz+1),slove(a,b,med+1,dr,2*poz+2));
}
void update(int cine,int st,int dr,int poz)
{
if(st>cine or cine>dr)
return;
if(st==dr)
{
sol[poz]=v[st];
return;
}
int med=(st+dr)/2;
update(cine,st,med,2*poz+1);
update(cine,med+1,dr,2*poz+2);
sol[poz]=max(sol[2*poz+1],sol[2*poz+2]);
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>v[i];
for(int i=0;i<=nm2;i++)
sol[i]=-1;
build(0,n-1,0);
for(int i=0;i<=nm2;i++)
if(sol[i]==-1)
{
len=i;
break;
}
for(int i=1;i<=m;i++)
{
cin>>p>>a>>b;
if(p==0)
{
cout<<slove(a-1,b-1,0,n-1,0)<<"\n";
}
else
{
v[a-1]=b;
update(a-1,0,n-1,0);
}
}
return 0;
}
/**
**/