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