#include<fstream>
#include <stdio.h>
#define dim 100001
#define in "arbint.in"
#define out "arbint.out"
using namespace std;
int n,val,pos,maxim,s,f;
int arb[4*dim+66];
inline int maxi(int a, int b) {
if ( a > b ) return a;
return b;
}
void Update(int nod,int l,int r)
{
if(l==r) {arb[nod]=val;return;}
int div=(l+r)/2;
if(pos<=div) Update(2*nod,l,div);
else Update(2*nod+1,div+1,r);
arb[nod]=maxi(arb[2*nod],arb[2*nod+1]);
}
void Query(int nod,int l,int r)
{
if(s<=l && r<=f)
{
if(maxim<arb[nod]) maxim=arb[nod];
return;
}
else
{
int div=(l+r)/2;
if(s<=div) Query(2*nod,l,div);
if(div<f) Query(2*nod+1,div+1,r);
}
}
int main()
{
int i,a,b,x,m;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &n, &m);
for(i=1;i<=n;i++)
{
scanf("%d", &x);val=x;pos=i;
Update(1,1,n);
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d", &x, &a, &b);
if(x==1) {pos=a;val=b;Update(1,1,n);}
else {s=a;f=b;maxim=-1;Query(1,1,n);printf("%d\n", maxim);}
}
return 0;
}