#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout ("arbint.out");
int t[1<<18];
void update (int nod, int st, int dr, int i, int x)
{
int a=nod<<1,b=(nod<<1)+1;
if (st<dr)
{
int m=(st+dr)>>1;
if (i<=m)
update (a,st,m,i,x);
else
update (b,m+1,dr,i,x);
}
else {t[nod]=x; return;}
if (t[a]>t[b]) t[nod]=t[a];
else t[nod]=t[b];
}
int query (int nod, int st, int dr, int a, int b)
{
if (st<a||b<dr)
{
int m=(st+dr)>>1;
int x=0,y=0;
if (a<=m) x=query(nod<<1,st,m,a,b);
if (b>m) y=query ((nod<<1)+1,m+1,dr,a,b);
if (x<y) x=y;
return x;
}
else return t[nod];
}
int main()
{
int n,m,i,a,b,x; bool op;
fin>>n>>m;
for (i=1;i<=n;i++) {fin>>x; update (1,1,n,i,x);}
for (i=1;i<=m;i++)
{
fin>>op>>a>>b;
if (op==0)
{x=query(1,1,n,a,b);
fout<<x<<"\n";}
else update (1,1,n,a,b);
}
return 0;
}