#include <stdio.h>
FILE *f=fopen ("arbint.in", "r");
FILE *g=fopen ("arbint.out", "w");
const int r=100001;
int n,m,i,x,y,k,max;
int v[4*r];
int maxim(int a, int b)
{
return (a>b) ? a : b;
}
void update(int poz, int ls, int ld) {
int h;
if (ls==ld)
{
v[poz]=y;
return;
}
h=(ls+ld)/2;
if (x<=h) update(2*poz, ls, h);
else update(2*poz+1, h+1, ld);
v[poz]=maxim(v[2*poz], v[2*poz+1]);
}
void find(int poz, int ls, int ld) {
int h;
if (x<=ls && ld<=y)
{
max=maxim(max, v[poz]);
return;
}
h=(ls+ld)/2;
if (x<=h) find(2*poz, ls, h);
if (y>h) find(2*poz+1, h+1, ld);
}
int main() {
fscanf(f, "%d%d", &n,&m);
for (i=1;i<=n;i++)
{
fscanf (f, "%d", &y); x=i;
update(1,1,n);
}
for (i=1;i<=m;i++)
{
fscanf (f, "%d%d%d", &k,&x,&y);
if (k)
update(1,1,n);
else
{
max=0;
find(1,1,n);
fprintf (g, "%d\n", max);
}
}
return 0;
}