#include <stdio.h>
#define SIZE_A 100000
int A[4*SIZE_A];
inline int max(int a, int b)
{
if(a < b)
return b;
return a;
}
void insert(int node, int left, int right, int loc, int value)
{
int m;
if(left == right)
{
A[node] = value;
}
else
{
m = (left+right)/2;
if(loc <= m)
{
insert(node*2, left, m, loc, value);
}
else
{
insert(node*2+1, m+1, right, loc, value);
}
A[node] = max(A[2*node], A[2*node+1]);
}
}
int find(int node, int left, int right, int a, int b)
{
int x, y, m;
x = y =0;
if(a <= left && right <= b)
{
return A[node];
}
else
{
m = (left+right)/2;
if(a <= m)
x = find(2*node, left, m, a, b);
if(b > m)
y = find(2*node+1, m+1, right, a, b);
return max(x, y);
}
}
int main()
{
int N, M;
int tmp, i, x, y;
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d", &N, &M);
for(i = 1; i <= N; i++)
scanf("%d", &tmp), insert(1, 1, N, i, tmp);
for(i = 1; i <= M; i++)
{
scanf("%d %d %d", &tmp, &x, &y);
if(tmp == 1)
{
insert(1, 1, N, x, y);
}
else
{
printf("%d\n", find(1, 1, N, x, y));
}
}
return 0;
}