import java.util.*;
import java.io.*;
public class Main {
static int A[];
static int v[];
public static void main(String[] args) throws FileNotFoundException {
Scanner reader = new Scanner(new FileInputStream("arbint.in"));
PrintWriter writer = new PrintWriter("arbint.out");
int N = reader.nextInt();
int M = reader.nextInt();
A = new int[4 * N];
v = new int[N + 1];
for (int i = 1; i <= N; ++i)
{
int key = reader.nextInt();
v[i] = key;
}
build(1, 1, N);
while (M-- > 0)
{
int tip, a, b;
tip = reader.nextInt();
a = reader.nextInt();
b = reader.nextInt();
if (tip == 1)
update(1, 1, N, a, b);
else
writer.print(query(1, 1, N, a, b) + "\n");
}
reader.close();
writer.close();
}
public static void build(int nod, int st, int dr)
{
if (st == dr)
A[nod] = v[st];
else
{
int m = (st + dr) >>> 1;
build(2 * nod, st, m);
build(2 * nod + 1, m + 1, dr);
A[nod] = Math.max(A[2 * nod], A[2 * nod + 1]);
}
}
public static void update(int nod, int st, int dr, int pos, int key)
{
if (st == dr)
{
A[nod] = key;
}
else
{
int m = (st + dr) >>> 1;
if (pos <= m)
update(2 * nod, st, m, pos, key);
else
update(2 * nod + 1, m + 1, dr, pos, key);
A[nod] = Math.max(A[2 * nod], A[2 * nod + 1]);
}
}
public static int query(int nod, int st, int dr, int st_q, int dr_q)
{
if (st_q <= st && dr <= dr_q)
return A[nod];
else
{
int m = (st + dr) >>> 1;
int sol = -1;
if (st_q <= m)
sol = Math.max(sol, query(2 * nod, st, m, st_q, dr_q));
if (m < dr_q)
sol = Math.max(sol, query(2 * nod + 1, m + 1, dr, st_q, dr_q));
return sol;
}
}
}