#include <iostream>
#include <fstream>
#include <vector>
#include <tuple>
using namespace std;
ifstream fin("arbint.in");
ofstream fout ("arbint.out");
vector<int> v;
vector<int> elem;
int sol=1<<30;
void build(int t,int st,int dr)
{
if(st==dr)
{
v[t]=elem[st];
return;
}
int mij=(st+dr)>>1;
build(2*t,st,mij);
build(2*t+1,mij+1,dr);
v[t]=max(v[2*t],v[2*t+1]);
}
void update(int t,int st,int dr,int p,int x)
{
if(st==dr)
{
v[t]=x;
return;
}
int mij=(st+dr)>>1;
if(p<=mij)
update(t*2,st,mij,p,x);
else
update(t*2+1,mij+1,dr,p,x);
v[t]=max(v[t*2],v[t*2+1]);
}
void intr(int t,int st,int dr,int x,int y)
{
if(x<=st && dr<=y)
{
sol=max(sol,v[t]);
return;
}
int mij=(st+dr)>>1;
if(x<=mij)
{
intr(t*2,st,mij,x,y);
}
if(y>mij)
{
intr(t*2+1,mij+1,dr,x,y);
}
}
int main()
{
int n,m;
fin>>n>>m;
v.resize(4*n+4);
elem.resize(n+1);
for(int k=1;k<=n;k++)
fin>>elem[k];
build(1,1,n);
int c,x,y;
for(int d=1;d<=m;d++)
{
fin>>c>>x>>y;
if(c==1)
update(1,1,n,x,y);
else
{
sol=-(1<<30);
intr(1,1,n,x,y);
fout<<sol<<endl;
}
}
return 0;
}