#include <fstream>
#define Ndim 100001
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int ARB[4*Ndim];
void update(int nod,int st,int dr, int poz,int val)
{
if(st == dr)
{
ARB[nod] = val;
return;
}
int mid = (st+dr)/2;
if(mid >= poz)
update(2*nod,st,mid,poz,val);
else
update(2*nod+1,mid+1,dr,poz,val);
ARB[nod] = max(ARB[2*nod],ARB[2*nod+1]);
}
void query(int nod,int st,int dr,int f,int l,int *sol)
{
if(st>=f && dr<= l)
{
*sol = max(*sol,ARB[nod]);
return;
}
int mid = (st+dr)/2;
if(mid >= f)
query(2*nod,st,mid,f,l,sol);
if(mid < l)
query(2*nod+1,mid+1,dr,f,l,sol);
}
int main()
{
int n,m,sol,t,a,b,i;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>a;
update(1,1,n,i,a);
}
for(i=1;i<=m;i++)
{
fin>>t>>a>>b;
if(t==0)
{
sol = 0;
query(1,1,n,a,b,&sol);
fout<<sol<<'\n';
}
else
update(1,1,n,a,b);
}
return 0;
}