#include<fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N, M;
int Arb[40000000];
int Query(int i, int L, int R, int l, int r)
{
if(L >= l && R <= r)
return Arb[i];
int aux = L + (R - L) / 2;
if(r <= aux)
return Query(2 * i, L, aux, l, r);
if(l >= aux + 1)
return Query(2 * i + 1, aux + 1, R, l, r);
return max(Query(2 * i, L, aux, l, aux), Query(2 * i + 1, aux + 1, R, aux + 1, r));
}
void Update(int i, int L, int R, int A, int B)
{
if(L == R)
{
Arb[i] = B;
return;
}
int aux = L + (R - L) / 2;
if(A <= aux)
Update(2 * i, L, aux, A, B);
else
Update(2 * i + 1, aux + 1, R, A, B);
Arb[i] = max(Arb[2 * i], Arb[2 * i + 1]);
}
int main()
{
int j, opt, a, b, x;
f >> N>> M;
for(j= 1; j<= N; j++)
{
f >> x;
Update(1, 1, N, j, x);
}
for(j= 1; j<= M; j++)
{
f >>opt>> a >> b;
if(opt== 0)
g << Query(1, 1, N, a, b) <<endl;
else
Update(1, 1, N, a, b);
}
f.close();
g.close();
return 0;
}