/*
* File: main.c
* Author: Razvan
*
* Created on June 3, 2015, 8:15 AM
*/
#include <stdio.h>
#include <stdlib.h>
#define FILE_IN "arbint.in"
#define FILE_OUT "arbint.out"
#define SIZE 1<<18
#define MAX(a,b) a >= b ? a : b;
int N, M, A[SIZE], i, a, b, max;
void update(int s, int e, int k)
{
if (s==e)
A[k] = b;
else
{
if (a <=(s+e)/2)
update(s, (s+e)/2, 2*k+1);
else
update((s+e)/2 + 1, e, 2*k+2);
A[k] = MAX(A[2*k+1], A[2*k+2]);
}
}
void query(int s, int e, int k)
{
if (a<=s && e<=b)
{
max = MAX(max, A[k]);
return;
}
int m = (s+e)/2;
if ( a <=m )
query(s, m, 2*k+1);
if ( m < b )
query(m+1, e, 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 x;
for(i=1;i<=N;++i)
{
scanf("%d", &b);
a = i;
update(1, N, 0);
}
for(i=1;i<=M;++i)
{
scanf("%d %d %d", &x, &a, &b);
if (x)
{
update(1, N, 0);
}
else
{
max = 0;
query(1, N, 0);
printf("%d\n", max);
}
}
return (EXIT_SUCCESS);
}