#include <cstdio>
#define max(a,b) (a>b)?a:b
using namespace std;
int val,n,a,b,m,x,pos,maxim,Max[400088];
void update(int st,int dr,int nod){
if(st==dr){Max[nod]=x;return;}
int div=(st+dr)/2;
if(pos<=div) update(st,div,2*nod);
else update(div+1,dr,2*nod+1);
Max[nod]=max(Max[2*nod],Max[2*nod+1]);
}
void query(int st,int dr,int nod){
if(a<=st&&dr<=b){
if(maxim<Max[nod]) maxim=Max[nod];
return;
}
// else{
int div=(st+dr)/2;
if(a<=div)query(st,div,2*nod);
if(div<b)query(div+1,dr,2*nod+1);
// }
}
int main()
{
freopen("arbint.in", "r",stdin);
freopen("arbint.out", "w",stdout);
scanf("%d%d", &n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&x);
pos=i;update(1,n,1);
}
for(int i=1;i<=m;++i){
scanf("%d%d%d", &val, &a, &b);
if(val==0){
maxim=-1;
query(1,n,1);
printf("%d\n", maxim);
}else{
x=b;pos=a;
update(1,n,1);
}
}
return 0;
}