#include <fstream>
using namespace std;
int v[600070];
int n;
void actualizare ( int , int , int , int , int , int);
int interogare ( int , int ,int , int ,int );
int main()
{
ifstream fin ("arbint.in");
freopen ("arbint.out","w",stdout);
int i,y,m;
int j,k,l,maxim;
fin>>n>>m;
for (i=1;i<=n;i++)
{
fin>>y;
actualizare(1,1,n,i,i,y);
}
for ( i=0;i<m;i++)
{
fin>>j>>k>>l;
if ( j )
{
actualizare(1,1,n,k,k,l);
}
else
{
maxim=interogare(1,1,n,k,l);
printf("%d",maxim);
printf("\n");
}
}
fin.close();
//fout.close();
return 0;
}
void actualizare (int poz,int stg,int dr,int a,int b,int x)
{
int mid;
if (( a<= stg) && (dr<=b))
{
v[poz]=x;
return;
}
mid=(stg+dr)/2;
if ( a<=mid )
actualizare (2*poz,stg,mid,a,b,x);
if ( mid<b )
actualizare (2*poz+1,mid+1,dr,a,b,x);
if (v[2*poz]>v[2*poz+1] )
v[poz]=v[2*poz];
else
v[poz]=v[2*poz+1];
}
int interogare (int poz,int stg,int dr,int a,int b)
{
int mid,s=0,d=0;
if (( a<= stg) && (dr<=b))
{
return v[poz];
}
mid=(stg+dr)/2;
if ( a<=mid )
s=interogare (2*poz,stg,mid,a,b);
if ( mid<b )
d=interogare (2*poz+1,mid+1,dr,a,b);
if ( s>d )
return s;
else
return d;
}