#include <stdio.h>
#define max(a,b) ((a)<(b))?(b):(a)
int heap[500000],pos,val,a,b;
void UpdateHeap(int nod,int left,int right)
{
if(left==right){
heap[nod] = val;
return;
}
int mid = (left+right)/2;
if(pos<=mid)
UpdateHeap(2*nod,left,mid);
else
UpdateHeap(2*nod+1,mid+1,right);
heap[nod] = max(heap[nod*2],heap[nod*2+1]);
}
int GetMax(int nod,int left,int right)
{
if(a<=left && right<=b)
return heap[nod];
int maxim = 2147483648;
int mid = (left + right)/2;
if(a<=mid)
maxim = GetMax(2*nod,left,mid);
if(b>mid)
maxim = max(maxim,GetMax(2*nod+1,mid+1,right));
return maxim;
}
int main(int argc, char* argv[])
{
int i;
// heap = new int[500000];
for(i=1;i<500000;++i)
heap[i] = 2147483648;
int N,M;
FILE *fpr,*fpw;
fpr = fopen("arbint.in","r");
fpw = fopen("arbint.out","w");
fscanf(fpr,"%d %d",&N,&M);
for(i=1;i<=N;i++){
fscanf(fpr,"%d",&val);
pos = i;
UpdateHeap(1,1,N);
}
int tip;
for(i=1;i<=M;i++){
fscanf(fpr,"%d %d %d",&tip,&a,&b);
if(tip==0)
fprintf(fpw,"%d\n",GetMax(1,1,N));
else{
pos = a;
val = b;
UpdateHeap(1,1,N);
}
}
// delete heap;
fclose(fpr);
fclose(fpw);
return 0;
}