#include <fstream>
using namespace std;
ifstream in ("arbint.in");
ofstream out ("arbint.out");
int arb[400005];
void update (int a, int b, int nod, int poz, int val)
{
if(a==b)
arb[nod]=val;
else
{
int mid=(a+b)/2;
if(poz<=mid)
update(a,mid,nod*2,poz,val);
else
update(mid+1,b,nod*2+1,poz,val);
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
}
int query (int a, int b, int nod, int st, int dr)
{
int r1=0,r2=0;
if(st<=a && dr>=b)
return arb[nod];
int mid=(a+b)/2;
if(st<=mid)
r1=query(a,mid,nod*2,st,dr);
if(mid<dr)
r2=query(mid+1,b,nod*2+1,st,dr);
return max(r1,r2);
}
int main()
{
int n,m,i,a,b,c;
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>a;
update(1,n,1,i,a);
}
for(i=1;i<=m;i++)
{
in>>a>>b>>c;
if(a==1)
update(1,n,1,b,c);
else
out<<query(1,n,1,b,c)<<'\n';
}
return 0;
}