# include <stdio.h>
# define max 100001
int v[4*max];
int maxi(int a, int b)
{
if(a>b)
return a;
else
return b;
}
void adaugare(int st,int dr,int x,int val,int nod)
{
if(st == dr)
{
v[nod] = val;
return;
}
int mij=(st+dr)/2;
if(mij>=x)
adaugare(st,mij,x,val,2*nod);
else
adaugare(mij+1,dr,x,val,2*nod+1);
v[nod]=maxi(v[2*nod],v[2*nod+1]);
}
int minim(int st,int dr,int x,int y,int nod)
{
if(x <= st && dr <= y)
{
return v[nod];
}
int mij = (st+dr)/2;
int val1,val2;
val1 = val2 = 0;
if(x <= mij)
val1 = minim(st,mij,x,y,2*nod);
if(y >= mij+1)
val2 = minim(mij+1,dr,x,y,2*nod+1);
return maxi(val1,val2);
}
int main()
{
int n,m;
FILE *f1=fopen("arbint.in", "r");
FILE *f2=fopen("arbint.out", "w");
int x,y;
int c;
fscanf(f1,"%d%d",&n,&m);
for(int i = 1;i<=n;i++)
{
fscanf(f1,"%d",&x);
adaugare(1,n,i,x,1);
}
for(int i=1;i<=m;i++)
{
fscanf(f1,"%d%d%d",&c, &x, &y);
if(c==1)
{
adaugare(1,n,x,y,1);
}
else
fprintf(f2,"%d\n",minim(1,n,x,y,1));
}
return 0;
}