#include <cstdio>
#define nmax 100005
#include <algorithm>
using namespace std;
FILE *f=fopen("arbint.in","r");
FILE *g=fopen("arbint.out","w");
int n,m,adi[265000],x,a,b,maxim;
void update(int st,int dr,int nod)
{if (st==a&&a==dr) {adi[nod]=b;}
else {int mij=(st+dr)>>1;
if (a<=mij) update(st,mij,nod*2);
if (mij+1<=a) update(mij+1,dr,nod*2+1);
adi[nod]=max(adi[nod*2],adi[nod*2+1]);
}
}
void query(int st,int dr,int nod)
{if (a<=st&&dr<=b) maxim=max(maxim,adi[nod]);
else {int mij=(st+dr)>>1;
if (a<=mij) query(st,mij,nod*2);
if (mij+1<=b) query(mij+1,dr,nod*2+1);
}
}
int main()
{int i,j;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++)
{a=i;
fscanf(f,"%d",&b);
update(1,n,1);}
for (i=1;i<=m;i++)
{fscanf(f,"%d %d %d",&x,&a,&b);
if (x==1) {update(1,n,1);
}
else {maxim=0;
query(1,n,1);
fprintf(g,"%d\n",maxim);
}
}
return 0;
}