#include<fstream>
using namespace std;
int v[24144], a, b, c, n, m, i;
ifstream f("arbint.in");
ofstream g("arbint.out");
int max( int a, int b )
{
if ( a > b )
return a;
return b;
}
void adaugare( int st, int dr, int k, int a, int b )
{
int mij, fs, fd;
if ( st == dr )
{
v[k] = a;
return;
}
fs = 2 * k;
fd = fs + 1;
mij = ( st + dr ) / 2;
if (b <= mij)
adaugare( st, mij, 2 * k, a, b);
else
adaugare( mij + 1, dr, 2 * k + 1, a, b);
if ( v[fs] > v[fd] )
v[k] = v[fs];
else
v[k] = v[fd];
}
int cautare_maxim(int k, int st, int dr, int a, int b)
{
int fs = 0, fd = 0, mij;
if ( a <= st && dr <= b)
return v[k];
mij = ( st + dr ) / 2;
if ( a <= mij )
fs = cautare_maxim( 2 * k, st, mij, a, b );
if ( b > mij )
fd = cautare_maxim( 2 * k + 1, mij + 1, dr, a ,b);
if ( fs < fd )
return fd;
return fs;
}
int main()
{
f>>n>>m;
for ( i = 1; i <= n; i++)
{
f>>a;
b = i;
adaugare( 1, n, 1, a, b );
}
for ( i = 1; i <= m; i++)
{
f>>c>>a>>b;
if (c==0)
g<<cautare_maxim( 1, 1, n, a, b )<<"\n";
else
adaugare( 1, n, 1, b, a );
}
return 0;
}