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