#include<cstdio>
using namespace std;
int n,x,y,t,op,k,ss,dd;
int arb[4*100000];
void push(int,int,int);
void maxi(int,int,int,int,int);
int main()
{
freopen("arbint.in","rt",stdin);
freopen("arbint.out","wt",stdout);
scanf("%d%d",&n,&t);
for(dd=1;dd<=n;dd++)
{
scanf("%d",&ss);
push(1,1,n);
}
for(int i=1;i<=t;i++)
{
scanf("%d%d%d",&op,&dd,&ss);
if(op)
{
push(1,1,n);
}
else
{
k = 0;
maxi(1,1,n,dd,ss);
printf("%d\n",k);
}
}
return 0;
}
void push(int nod, int s, int d)
{
if( s==d )
{
arb[nod]=ss;
return ;
}
int m=(s+d)/2;
if(dd <= m) push(2*nod, s ,m);
else push(2*nod+1,m+1,d);
arb[nod]=(arb[2*nod] < arb[2*nod+1]) ? arb[2*nod+1]: arb[2*nod];
}
void maxi(int nod, int s, int d,int ss, int dd)
{
if( ss <= s && d<=dd)
{
k = (arb[nod] > k) ? arb[nod] : k ;
return ;
}
int m=(s+d)/2;
if(ss<=m) maxi(2*nod, s ,m,ss,dd);
if(m<dd) maxi(2*nod+1, m+1, d,ss,dd);
}