#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int ai[100005],v[270000],mx=0,n,cnt=0;
void bt(int nod)
{
if(nod==1)
return;
int n2;
if(nod%2==0)
n2=nod+1;
else
n2=nod-1;
v[nod/2]=max(v[nod],v[n2]);
bt(nod/2);
}
void up(int st,int dr,int nod,int a,int b,int p)
{
if(p==0)
{
if(b>v[nod])
v[nod]=b;
}
else
{
if(st==dr)
{
v[nod]=b;
bt(nod);
return;
}
}
if(st==dr)
return;
int mij=(st+dr)/2;
if(st<=a && a<=mij)
up(st,mij,nod*2,a,b,p);
else
up(mij+1,dr,nod*2+1,a,b,p);
}
void inter(int nod,int st,int dr,int a,int b)
{
if(st==a && dr==b)
{
if(v[nod]>mx)
mx=v[nod];
return;
}
if(st==dr)
return;
int mij=(st+dr)/2;
int x=0,y=0;
if(mij+1<=a && a<=dr)
x=1;
if(mij+1<=b && b<=dr)
y=1;
if(x==0 && y==0)
inter(nod*2,st,mij,a,b);
if(x==1 && y==1)
inter(nod*2+1,mij+1,dr,a,b);
if(x==0 && y==1)
{
inter(nod*2,st,mij,a,mij);
inter(nod*2+1,mij+1,dr,mij+1,b);
}
}
int main()
{
int m,a,b,p;
cin >> n >> m;
for(int i=1;i<=n;i++)
{
cin >> ai[i];
up(1,n,1,i,ai[i],0);
}
for(int i=1;i<=m;i++)
{
cin >> p >> a >> b;
if(p==0)
{
mx=0;
inter(1,1,n,a,b);
cout << mx << '\n';
}
else
{
if(b>ai[a])
{
ai[a]=b;
up(1,n,1,a,b,0);
}
if(b<ai[a])
{
up(1,n,1,a,b,1);
ai[a]=b;
}
}
}
return 0;
}