#include <fstream>
using namespace std;
int a[300005],i,x,y,p,n,m;
int query(int x,int y,int n,int p,int q)
{
if ((x<=p) && (q<=y))
{
return a[n];
}
else
{
int m=(p+q)/2;
int l=0;
if (m>=x)
l=query(x,y,2*n,p,m);
if (m+1<=y)
l=max(query(x,y,2*n+1,m+1,q),l);
return l;
}
}
void update(int x,int v,int n,int p,int q)
{
if ((p==x) && (q==x))
{
a[n]=v;
}
else
{
int m=(p+q)/2;
if (m>=x)
update(x,v,2*n,p,m);
if (m+1<=x)
update(x,v,2*n+1,m+1,q);
a[n]=max(a[2*n],a[2*n+1]);
}
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f >> n >> m;
for (i=1;i<=n;i++)
{
f >> x;
update(i,x,1,1,n);
}
for (i=1;i<=m;i++)
{
f >> p >> x >> y;
if (p==0)
g << query(x,y,1,1,n) << "\n";
else update(x,y,1,1,n);
}
}