#include <stdio.h>
#define max(a,b) ((a)<(b))?(b):(a)
void UpdateHeap(int *heap,int nod,int left,int right,int i,int val)
{
if(left==right){
heap[nod] = val;
return;
}
int mid = (left+right)/2;
if(i<=mid)
UpdateHeap(heap,2*nod,left,mid,i,val);
else
UpdateHeap(heap,2*nod+1,mid+1,right,i,val);
heap[nod] = max(heap[2*nod],heap[2*nod+1]);
}
int GetMax(int *heap,int nod,int left,int right,int a,int b)
{
if(a<=left && right<=b)
return heap[nod];
int maxim = 2147483648;
int mid = (left + right)/2;
if(a<=mid)
maxim = GetMax(heap,2*nod,left,mid,a,b);
if(b>mid)
maxim = max(maxim,GetMax(heap,2*nod+1,mid+1,right,a,b));
return maxim;
}
int main(int argc, char* argv[])
{
int *heap;
int i;
heap = new int[300000];
for(i=1;i<300000;++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);
int val;
for(i=1;i<=N;i++){
fscanf(fpr,"%d",&val);
UpdateHeap(heap,1,1,N,i,val);
}
int tip,A,B;
for(i=1;i<=M;i++){
fscanf(fpr,"%d %d %d",&tip,&A,&B);
if(tip==0)
fprintf(fpw,"%d\n",GetMax(heap,1,1,N,A,B));
else
UpdateHeap(heap,1,1,N,A,B);
}
delete heap;
fclose(fpr);
fclose(fpw);
return 0;
}