#include <fstream>
#define nmax 100000
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,i,q,arb[4*nmax],x,y,z;
void adaug(int poz,int val,int nod,int a,int b)
{
if(a==b) arb[nod]=val;
else{
int mij=(a+b)/2;
if(poz<=mij) adaug(poz,val,2*nod,a,mij);
else adaug(poz,val,2*nod+1,mij+1,b);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
}
int maxim(int s,int d,int nod,int a,int b)
{
int r1=0,r2=0;
if(s<=a&&b<=d) return arb[nod];
int mij=(a+b)/2;
if(s<=mij) r1=maxim(s,d,2*nod,a,mij);
if(mij<d) r2=maxim(s,d,2*nod+1,mij+1,b);
return max(r1,r2);
}
int main()
{
f>>n>>q;
for(i=1;i<=n;i++)
{
f>>x;
adaug(i,x,1,1,n);
}
for(i=1;i<=q;i++)
{
f>>x>>y>>z;
if(x==1) adaug(y,z,1,1,n);
else g<<maxim(y,z,1,1,n)<<'\n';
}
return 0;
}