#include <cstdio>
#include <algorithm>
#define MAX 100001
using namespace std;
int A[MAX<<2],x,y,r;
void update(int nod,int st,int dr){
if(st==dr){
A[nod]=y;
return ; }
int md=(st+dr)/2;
if(x<=md)update(2*nod,st,md); else
update(2*nod+1,md+1,dr);
A[nod]=max(A[2*nod],A[2*nod+1]);
}
void query(int nod,int st,int dr){
if(x<=st&&dr<=y){
r=max(r,A[nod]);
return ; }
int md=(st+dr)/2;
if(x<=md)query(2*nod,st,md);
if(y>md)query(2*nod+1,md+1,dr);
}
int main(){
int n,m,c;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&y);
x=i;
update(1,1,n); }
for(int i=1;i<=m;i++){
scanf("%d %d %d",&c,&x,&y);
if(c==0){
r=0;
query(1,1,n);
printf("%d\n",r); } else update(1,1,n);
}
// for(int i=1;i<=2*n+1;i++)printf("%d ",A[i]);
}