#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,v[400001],type,a,b,ad[400001],maxq;
void update (int c,int st,int dr,int a,int b,int x)
{
if (a<=st && dr<=b)
{
ad[c]=x;
}
else
{
int mijl=(st+dr)/2;
if (a<=mijl)
update(2*c,st,mijl,a,b,x);
if (b>mijl)
{
update(2*c+1,mijl+1,dr,a,b,x);
}
ad[c]=max(ad[2*c],ad[2*c+1]);
}
}
void query (int c,int st,int dr,int a,int b)
{
if (a<=st && dr<=b)
{
maxq=max(maxq,ad[c]);
}
else
{
int mijl=(st+dr)/2;
if (a<=mijl)
query(2*c,st,mijl,a,b);
if (b>mijl)
query(2*c+1,mijl+1,dr,a,b);
}
}
int main()
{
f>>n>>m;
for (int i=1; i<=n; i++)
{
f>>v[i];
update(1,1,n,i,i,v[i]);
}
for (int i=1; i<=m; i++)
{
f>>type>>a>>b;
if (type==1)
{
update(1,1,n,a,a,b);
}
if (type==0)
{
maxq=0;
query(1,1,n,a,b);
g<<maxq<<'\n';
}
}
return 0;
}