#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[4*100001],maxi;
int maxim(int a,int b)
{
return (a > b) ? a : b;
}
void add(int nod,int st,int dr,int poz,int val)
{
if(st==dr)
{
arb[nod] = val;
return ;
}
int mij = (st + dr) / 2;
if(poz <= mij)
{
add(2*nod,st,mij,poz,val);
}
else
{
add(2*nod+1,mij+1,dr,poz,val);
}
arb[nod] = maxim(arb[2*nod],arb[2*nod+1]);
}
int ask(int nod,int st,int dr,int a,int b)
{
if(a<=st && dr<=b)
{
return maxim(maxi,arb[nod]);
}
int mij = (st + dr) / 2;
if(a<=mij)
{
return ask(2*nod,st,mij,a,b);
}
if(b>mij)
{
return ask(2*nod+1,mij+1,dr,a,b);
}
}
int main()
{
int i,x,n,m,op,st,dr;
fin>>n>>m;
for(i=1; i<=n; i++)
{
fin>>x;
add(1,1,n,i,x);
}
for(i=1; i<=m; i++)
{
fin>>op>>st>>dr;
if(op==0)
{
fout<<ask(1,1,n,st,dr)<<"\n";
}
else
{
add(1,1,n,st,dr);
}
}
return 0;
}