#include <iostream>
#define IN "arbint.in"
#define OUT "arbint.out"
#define Lg 100010
using namespace std;
int sir[Lg], H[4*Lg];
int N, M, maxim, S, D;
void build(int nod, int st, int dr)
{
if(st==dr)
H[nod]=sir[st];
else
{
int mij=(st+dr)>>1;
build(nod<<1,st,mij);
build((nod<<1)+1,mij+1,dr);
H[nod]=H[nod<<1]<H[(nod<<1)+1]?H[(nod<<1)+1]:H[nod<<1];
}
}
void citire()
{
scanf("%d %d",&N,&M);
for(int i=1;i<=N;i++)
scanf("%d",&sir[i]);
build(1,1,N);
}
void update(int nod,int st,int dr)
{
if(st==dr)
H[nod]=D;
else
{
int mij=(st+dr)>>1;
if(S<=mij)
update(nod<<1,st,mij);
else
update((nod<<1)+1,mij+1,dr);
H[nod]=H[nod<<1]<H[(nod<<1)+1]?H[(nod<<1)+1]:H[nod<<1];
}
}
void def_maxim(int nod,int st,int dr)
{
if(dr<=D && st>=S)
{
if(maxim<H[nod])
maxim=H[nod];
}
else
{
int mij=(st+dr)>>1;
if(S<=mij)
def_maxim(nod<<1,st,mij);
if(D>mij)
def_maxim((nod<<1)+1,mij+1,dr);
}
}
void solve()
{
int op;
for(int i=1;i<=M;i++)
{
scanf("%d %d %d",&op,&S,&D);
if(op)
update(1,1,N);
else
{
maxim=0;
def_maxim(1,1,N);
printf("%d\n",maxim);
}
}
}
int main()
{
freopen (IN,"r",stdin);
freopen (OUT,"w",stdout);
citire();
solve();
return 0;
}