#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,v[100001],k,t,p1,p2,arb[400005],cm=0;
void construire(int ind,int st,int dr)
{
if(st==dr)
{
arb[ind]=v[st];
}
else
{
int mid=(st+dr)/2;
construire(ind*2,st,mid);
construire(ind*2+1,mid+1,dr);
arb[ind]=max(arb[ind*2],arb[ind*2+1]);
}
}
void cautare(int ind,int st,int dr,int p1,int p2)
{
if(p1<=p2)
{
if(p1==st && dr<=p2)
{
cm=max(arb[ind],cm);
cautare(1,1,n,dr+1,p2);
}
else
{
int mid=(st+dr)/2;
if(p1>st)
{
if(mid+1>p1)
{
cautare(ind*2,st,mid,p1,p2);
}
else
cautare(ind*2+1,mid+1,dr,p1,p2);
}
else if(dr>p2)
{
cautare(ind*2,st,mid,p1,p2);
}
}
}
}
void actualizare(int ind,int st,int dr,int poz)
{
if(st==dr)
{
arb[ind]=v[st];
}
else
{
int mid=(st+dr)/2;
if(poz>=st && poz<=mid)
actualizare(ind*2,st,mid,poz);
else
actualizare(ind*2+1,mid+1,dr,poz);
arb[ind]=max(arb[ind*2],arb[ind*2+1]);
}
}
int main()
{
fin>>n>>k;
for(int i=1;i<=n;i++)
{
fin>>v[i];
}
construire(1,1,n);
for(int i=1;i<=k;i++)
{
fin>>t>>p1>>p2;
if(t==0)
{
cm=0;
cautare(1,1,n,p1,p2);
fout<<cm<<"\n";
}
else
{
v[p1]=p2;
actualizare(1,1,n,p1);
}
}
return 0;
}