#include<fstream.h>
#include<algorithm>
using namespace std;
#define maxim(a, b) (a>b? a:b)
int n,q,v[100005],ai[400000];
void cst(int k, int st, int dr)
{
if (st==dr)
{
ai[k]=v[st];
return;
}
int mij=(st+dr)/2;
cst(2*k,st,mij);
cst(2*k+1,mij+1,dr);
ai[k]=maxim(ai[k*2],ai[k*2+1]);
}
int getmax(int k, int st, int dr, int a, int b)
{
if (st>=a && dr<=b)
return ai[k];
int mij=(st+dr)/2;
int val=0;
if (mij>=a)
val=getmax(2*k,st,mij,a,b);
if (mij<b)
val=maxim(val, getmax(2*k+1,mij+1,dr,a,b));
return val;
}
void update( int k, int st, int dr, int poz)
{
if (st==dr)
{
ai[k]=v[poz];
return;
}
int mij=(st+dr)/2;
if (mij>=poz)
update(k*2,st, mij, poz);
else
update (k*2+1, mij+1, dr, poz);
ai[k]=maxim(ai[k*2],ai[k*2+1]);
}
int main ()
{
int op,i,j,a,b;
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>q;
for (i=1;i<=n;i++)
f>>v[i];
cst(1,1,n);
for (i=1;i<=q;i++)
{
f>>op;
f>>a>>b;
if (op==0)
g<<getmax (1,1,n,a,b)<<'\n';
else
{
v[a]=b;
update (1,1,n,a);
}
}
f.close();
g.close();
return 0;
}