#include <cstdio>
#include <algorithm>
#define nmax 500009
using namespace std;
int n,m,maxim;
typedef int Arb;
Arb H[nmax];
void Upgrade(int nod,int st,int dr,int x,int poz){
if(st == dr){
H[nod] = x;
return;
}
int mij = (st+dr)/2;
if(mij >= poz) Upgrade(2*nod,st,mij,x,poz);
else Upgrade(2*nod+1,mij+1,dr,x,poz);
H[nod] = max(H[2*nod],H[2*nod+1]);
}
void Ask(int nod,int st,int dr , int A,int B){
if(A <= st && dr <= B ) {
if(maxim < H[nod])
maxim = H[nod];
return;}
int mij = (st+dr)/2;
if(mij >= A) Ask(2*nod,st,mij,A,B);
if(mij < B) Ask(2*nod+1,mij+1,dr,A,B);
}
int main(){
int i,x,cod,y;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&x);
Upgrade(1,1,n,x,i);
}
while(m--){
scanf("%d",&cod);
scanf("%d%d",&x,&y);
if(cod == 1)
Upgrade(1,1,n,y,x);
else{
maxim=-1;
Ask(1,1,n,x,y);
printf("%d\n",maxim);
}}
return 0;
}