#include <bits/stdc++.h>
#define Nmax 100050
using namespace std;
FILE *fin = fopen("arbint.in", "r");
FILE *fout = fopen("arbint.out", "w");
int Narb, Q, aint[4 * Nmax];
inline void Update(int p, int x)
{
int t;
p += Narb - 1;
aint[p] = x;
while(p > 0)
{
if(p & 1) p--;
t = p >> 1;
aint[t] = max(aint[p], aint[p + 1]);
p = t;
}
}
inline int Query(int p, int x, int y, int st, int dr)
{
if(x == st && y == dr) return aint[p];
int mid = (st + dr) / 2;
if(y <= mid)
return Query(2 * p, x, y, st, mid);
if(x > mid)
return Query(2 * p + 1, x, y, mid + 1, dr);
return max(Query(2 * p, x , mid, st, mid), Query(2 * p + 1, mid + 1, y, mid + 1, dr));
}
int main()
{
int N, Q, i, T, x, y, p;
fscanf(fin, "%d %d", &N, &Q);
Narb = 1;
while(Narb < N)
Narb *= 2;
p = Narb;
for(i = 1; i <= N; i++)
fscanf(fin, "%d", &aint[p++]);
for(i = Narb - 1; i > 0; i--)
aint[i] = max(aint[2 * i], aint[2 * i + 1]);
while(Q--)
{
fscanf(fin, "%d %d %d", &T, &x, &y);
if(T == 0)
fprintf(fout, "%d\n", Query(1, x, y, 1, Narb));
else Update(x, y);
}
return 0;
}