#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int i,k,v[200005],j,a,b,c,x,y,d,val,n,m,maxi,in[100001];
int variabila_inutila[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1];
void update(int st,int dr,int nod)
{
if(st>=dr)
{
v[nod]=val;
return;
}
int mij=(st+dr)/2;
if(a>mij)
update(mij+1,dr,(nod<<1)+1);
else
update(st,mij,(nod<<1));
v[nod]=max(v[nod*2],v[nod*2+1]);
}
void updatee(int st,int dr,int nod)
{
if(st>=dr)
{
v[nod]=in[st];
return;
}
int mij=(st+dr)/2;
updatee(mij+1,dr,nod<<1);
updatee(st,mij,(nod<<1)+1);
v[nod]=max(v[nod*2],v[nod*2+1]);
}
void querry(int st,int dr,int tacidinguratudorcatesparg)
{
if(st>=a&&dr<=b)
{maxi=max(maxi,v[tacidinguratudorcatesparg]);
return ;}
int mij=(st+dr)/2;
if(a<=mij)
querry(st,mij,tacidinguratudorcatesparg<<1);
if(b>mij)
querry(mij+1,dr,(tacidinguratudorcatesparg<<1)+1);
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>in[i],updatee(1,n,1);
for(i=1;i<=m;i++)
{
int p;
fin>>p>>a>>b;
if( p == 1 )
{
val=b;
update(1,n,1);
}
else
{
maxi=-10;
querry(1,n,1);
fout<<maxi<<"\n";
}
}
return 0;
}