#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int arb[1<<18];
void update(int nod,int l,int r,int pos,int v)
{
if(l==r)
{
arb[nod]=v;
return;
}
int mij=(l+r)>>1;
if(pos>mij)
update(nod*2+1,mij+1,r,pos,v);
else
update(nod*2,l,mij,pos,v);
arb[nod]=max(arb[nod*2],arb[2*nod+1]);
}
int maxx=0;
void question(int nod,int l,int r,int s,int d)
{
if(s<=l&&r<=d)
{
if(maxx<arb[nod])
maxx=arb[nod];
return;
}
if(l==r)
return;
int mij=(l+r)>>1;
if(s<=mij)
question(nod*2,l,mij,s,d);
if(d>mij)
question(nod*2+1,mij+1,r,s,d);
}
int main()
{
ifstream si;
si.open("arbint.in");
ofstream so;
so.open("arbint.out");
int n,m;
si>>n>>m;
int i;
int a,b,c;
for(i=1;i<=n;++i)
{
si>>a;
update(1,1,n,i,a);
}
for(i=0;i<m;++i)
{
si>>a>>b>>c;
if(a==1)
update(1,1,n,b,c);
else
{
question(1,1,n,b,c);
so<<maxx<<endl;
maxx=0;
}
}
}