#include<stdio.h>
#define max(a,b) ((a)>(b)?(a):(b))
int v[1000000],i,min,j,k,l,m,n,p,q;
void upd(int p,int q,int poz){
if(p==q){v[poz]=k;return ;}
int m=(p+q)>>1;
if(m<i)upd(m+1,q,poz*2+1);
else
upd(p,m,poz*2);
v[poz]=max(v[2*poz],v[2*poz+1]);
}
void querry(int p,int q,int poz){
if((i<=p)&&(q<=k)){
if(v[poz]>min)min=v[poz];return ;}
int m=(p+q)>>1;
if(p<m)querry(p,m,2*poz);
if(q>m)querry(m+1,q,2*poz+1);
}
int main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{scanf("%d",&k);
upd(1,n,1);
}
for(j=1;j<=m;j++)
{scanf("%d %d %d",&l,&i,&k);
if(l==1)
upd(1,n,1);
else
{min=-1;
querry(1,n,1);
printf("%d\n",min);}
}
return 0;}