#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int v[600070],rez,n,k,i,x,y,z;
void actualizare ( int ,int,int,int,int);
void interogare (int , int ,int ,int ,int);
int main()
{
//int
fin>>n>>k;
for (i=1;i<=n;i++)
{
fin>>x;
actualizare (1,x,1,n,i);
}
for (i=0;i<k;i++)
{
fin>>z>>x>>y;
if (z)
{
actualizare (1,y,1,n,x);
}
else
{
interogare (1,1,n,x,y);
fout<<rez<<"\n";
rez=-1;
}
}
return 0;
}
void actualizare ( int i ,int inf,int st,int dr,int a)
{
if (st==dr)
{
v[i]=inf;
return;
}
else
{
int mijl=(dr+st)/2;
if (a<=mijl)
actualizare (2*i,inf,st,mijl,a);
else
actualizare (2*i+1,inf,mijl+1,dr,a);
v[i]=max(v[2*i],v[i*2+1]);
}
}
void interogare (int i , int st, int dr , int a, int b)
{
if (a<=st && dr<=b )
{
if ( v[i]>rez )
rez=v[i];
return;
}
else
{
int mid = (dr+st)/2;
if (a<=mid )
interogare (i*2,st,mid,a,b);
if (b>mid)
interogare (i*2+1,mid+1,dr,a,b);
}
}