#include<bits/stdc++.h>
#define nmax 100000
using namespace std;
int ar[4*nmax],a,b,pozitie,valoare,t,n,m,i,x;
void update_pe_elem(int nod,int st,int dr,int pozitie,int valoare)
{
if(st==dr)
{
ar[nod]=valoare;
return;
}
int mijloc=(st+dr)/2;
if(pozitie>mijloc)
update_pe_elem(nod*2+1,mijloc+1,dr,pozitie,valoare);
else if(pozitie<=mijloc)
update_pe_elem(nod*2,st,mijloc,pozitie,valoare);
ar[nod]=max(ar[nod*2],ar[nod*2+1]);
}
int query_pe_interval(int nod,int st,int dr,int a ,int b)
{
if((a<=st)and(dr<=b))
return ar[nod];
long long left=0;
long long right=0;
int mijloc=(st+dr)/2;
if(a<=mijloc)
left=query_pe_interval(nod*2,st,mijloc,a,b);
if(b>mijloc)
right=query_pe_interval(nod*2+1,mijloc+1,dr,a,b);
return max(left,right);
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
update_pe_elem(1,1,n,i,x);
}
while(m--)
{
f>>t;
if(!t)
{
f>>a>>b;
g<<query_pe_interval(1,1,n,a,b)<<'\n';
}
else
{
f>>pozitie>>valoare;
update_pe_elem(1,1,n,pozitie,valoare);
}
}
return 0;
}