#include <fstream>
#include <algorithm>
#define NMAX 100000
using namespace std;
int aint[4 * NMAX + 1];
void update( int poz, int val, int st, int dr, int i ) {
int mid = ( st + dr ) / 2;
if( st == dr )
aint[i] = val;
else {
if( poz <= mid )
update( poz, val, st, mid, i * 2 );
else
update( poz, val, mid + 1, dr, i * 2 + 1 );
aint[i] = max(aint[i * 2],aint[i * 2 + 1]);
}
}
int query( int a, int b, int st, int dr, int i ) {
if( a == st && b == dr )
return aint[i];
else {
int mid = ( st + dr ) / 2;
if( b <= mid )
query( a, b, st, mid, i * 2 );
else if( a > mid )
query( a, b, mid + 1, dr, i * 2 + 1 );
else
return max( query( a, mid, st, mid, i * 2 ), query( mid + 1, b, mid + 1, dr, i * 2 + 1) );
}
}
int main() {
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a, b, op, st, dr, i, x, n, m;
fin>>n>>m;
for( i = 1; i <= n; i ++ ) {
fin>>x;
update( i, x, 1, n, 1 );
}
for( i = 1; i <= m; i ++ ) {
fin>>op>>a>>b;
if( op == 1 )
update( a, b, 1, n, 1 );
else
fout<<query( a, b, 1, n, 1 )<<"\n";
}
}