#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a[400005],n,m;
int tipop,x,y;
void adaugare(int st, int dr, int i, int poz)
{
if(st==dr || st>dr)
{
a[poz]=x;
return;
}
int mij=(st+dr)/2;
if(i>mij)
{
adaugare(mij+1, dr, i, poz*2+1);
}
else adaugare(st, mij, i, poz*2);
a[poz]=max(a[poz*2],a[poz*2+1]);
}
int query(int st, int dr, int starb, int drarb, int poz)
{
if(dr<starb|| (starb == drarb && st!=dr))
return 0;
if(st == starb && dr==drarb)
return a[poz];
int mij=(starb+drarb)/2;
int mx1=0, mx2=0;
if(st<=mij)
mx1=query(st, min(dr,mij), starb, mij, poz*2);
if(dr>mij)
mx2=query(max(st,mij+1), dr, mij+1, drarb, poz*2+1);
return max(mx1, mx2);
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
f>>x;
adaugare(1,n,i,1);
}
for(int i=1; i<=m; i++)
{
f>>tipop>>y>>x;
if(tipop==1)
adaugare(1,n,y,1);
else g<<query(y,x,1,n,1)<<'\n';
}
return 0;
}