#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int NMax = 100000;
int N, M, A[4 * NMax];
void Update(int st, int dr, int i, int poz, int val)
{
if(st == dr) {
A[i] = val;
return;
}
int m = (st + dr) >> 1;
if(poz <= m)
Update(st, m, 2 * i, poz, val);
else
Update(m + 1, dr, 2 * i + 1, poz, val);
A[i] = max(A[2 * i], A[2 * i + 1]);
}
int MaxQ(int st, int dr, int i, int a, int b)
{
if(a <= st && dr <= b)
return A[i];
if(b < st || dr < a)
return 0;
int m = (st + dr) >> 1;
return max(MaxQ(st, m, 2 * i, a, b), MaxQ(m + 1, dr, 2 * i + 1, a, b));
}
int main()
{
int x, a, b;
fin >> N >> M;
for(int i = 1; i <= N; i++) {
fin >> x;
Update(1, N, 1, i, x);
}
while(M--) {
fin >> x >> a >> b;
if(!x)
fout << MaxQ(1, N, 1, a, b) << '\n';
else
Update(1, N, 1, a, b);
}
fin.close();
fout.close();
return 0;
}