#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int value;
int position;
int indexleft,indexright;
struct node* st,* dr;
}node;
node* create_node(int left,int right)
{
node* newnode=(node*)malloc(sizeof(node));
newnode->value=1;
newnode->indexleft=left;
newnode->indexright=right;
newnode->st=NULL;
newnode->dr=NULL;
return newnode;
}
int max(int a, int b) {
return (a > b) ? a : b;
}
void addnode(node **tree,int pos,int value,int leftint,int rightint)
{
if(*tree==NULL)
{
*tree=create_node(leftint,rightint);
}
if(leftint == rightint)
{
(*tree)->value=value;
return;
}
int mid=(leftint+rightint)/2;
if(pos<=mid)
{
addnode(&(*tree)->st,pos,value,leftint,mid);
}
else
{
addnode(&(*tree)->dr,pos,value,mid+1,rightint);
}
int leftVal=(*tree)->st ?(*tree)->st->value:-1;
int rightVal=(*tree)->dr ? (*tree)->dr->value: -1;
if (leftVal>= rightVal) {
(*tree)->value = leftVal;
} else {
(*tree)->value =rightVal;
}
}
int displaynode(int left,int right,node *tree)
{
if(tree==NULL||right<tree->indexleft||left>tree->indexright)
return -1;
if(tree->indexleft>=left&&tree->indexright<=right)
return tree->value;
int leftMax = displaynode( left, right,tree->st);
int rightMax = displaynode(left, right,tree->dr );
return max(leftMax, rightMax);
}
void changenode(int position,int value,node *tree)
{
if(tree==NULL|| position< tree->indexleft || position > tree->indexright)
return;
if(tree->indexleft == tree->indexright)
{
tree->value=value;
return;
}
changenode(position,value,tree->st);
changenode(position,value,tree->dr);
int leftVal = tree->st ? tree->st->value : -1;
int rightVal = tree->dr ? tree->dr->value : -1;
if (leftVal >= rightVal) {
tree->value = leftVal;
} else {
tree->value = rightVal;
}
}
int main()
{
int n,m;
FILE* in=fopen("arbint.in","r");
FILE* out=fopen("arbint.out","w");
fscanf(in,"%d %d",&n,&m);
node *tree=NULL;
for(int i=1;i<=n;i++)
{
int value;
fscanf(in,"%d",&value);
addnode(&tree,i,value,1,n);
}
for(int i=1;i<=m;i++)
{
int opt, left,right;
fscanf(in,"%d %d %d",&opt,&left,&right);
if(opt==0)
{
fprintf(out,"%d\n",displaynode(left,right,tree));
}
if(opt==1)
{
changenode(left,right,tree);
}
}
}