/*
* File: main.c
* Author: Razvan
*
* Created on June 3, 2015, 8:15 AM
*/
#include <stdio.h>
#include <stdlib.h>
#define FILE_IN "arbin.in"
#define FILE_OUT "arbin.out"
#define SIZE 1<<17
#define MAX(a,b) a >= b ? a : b;
int N, M, A[SIZE], i;
void update(int i, int val, int a, int b, int k)
{
if (a==b)
A[k] = val;
else
{
if (i<=(a+b)/2)
update(i, val, a, (a+b)/2, 2*k+1);
else
update(i, val, (a+b)/2 + 1, b, 2*k+2);
A[k] = MAX(A[2*k+1], A[2*k+2]);
}
}
int query(int s, int e, int a, int b, int k)
{
if (a==s && e==b)
return A[k];
int m = (a+b)/2;
if ( e <=m )
return query(s, e, a, m, 2*k+1);
if ( s > m )
return query(s, e, m+1, b, 2*k+2);
return MAX(query(s, m, a, m, 2*k+1), query(m+1, e, m+1, b, 2*k+2));
}
/*
*
*/
int main(int argc, char** argv) {
freopen(FILE_IN, "r", stdin);
freopen(FILE_OUT, "w", stdout);
scanf("%d %d", &N, &M);
int a, b, x;
for(i=1;i<=N;++i)
{
scanf("%d", &x);
update(i, x, 1, N, 0);
}
for(i=1;i<=M;++i)
{
scanf("%d %d %d", &x, &a, &b);
if (x)
{
update(a, b, 1, N, 0);
}
else
printf("%d\n", query(a, b, 1, N, 0));
}
return (EXIT_SUCCESS);
}