//Vasilut
#include<fstream>
#define NN 100001
using namespace std;
ofstream out("arbint.out");
int arb[4 * NN + 1] ,n,m,maxx;
void read();
void make(int radacina,int left,int right,int valoare,int insert_position);
void query(int radacina,int left,int right,int start,int finish);
int main()
{
read();
return 0;
}
void read()
{
ifstream in("arbint.in");
in>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
in>>x;
make(1,1,n,x,i);
}
for(int type,st,dr; m ; --m)
{
in>>type>>st>>dr;
if( type == 0)
{
maxx=-1;
query(1,1,n,st,dr);
out<<maxx<<'\n';
}
else
make(1,1,n,dr,st);
}
}
void make(int radacina,int left,int right,int valoare,int insert_position)
{
if(left==right)
{
arb[radacina]=valoare;
return;
}
int mid;
mid=(left + right) >> 1;
if( insert_position <=mid)
make(2 * radacina,left,mid,valoare,insert_position);
else
make(2 * radacina+1,mid+1,right,valoare,insert_position);
arb[radacina]=max(arb[2*radacina],arb[2*radacina+1]);
}
void query(int radacina,int left,int right,int start,int finish)
{
if(start<=left && finish>=right)
{
if(arb[radacina] > maxx)
maxx=arb[radacina];
return ;
}
int mid;
mid=(left + right ) >> 1;
if( start<=mid)
query( 2*radacina,left,mid,start,finish);
else
query( 2*radacina+1,mid+1,right,start,finish);
}