//#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
vector<int>x;
int n,m,a,i,maxi,p,q,r;
void bemax(int bal,int jobb,int gyoker,int poz, int k)
{
if(bal==jobb)
{
x[gyoker]=k;
return;
}
int kozep=(jobb+bal)/2;
if(poz<=kozep) bemax(bal,kozep,2*gyoker,poz,k);
else bemax(kozep+1,jobb,2*gyoker+1,poz,k);
x[gyoker]=max(x[gyoker*2],x[gyoker*2+1]);
}
void lekermax(int bal,int jobb,int gyoker,int a,int b)
{
if(a<=bal && jobb<=b)
{
if(x[gyoker]>maxi) maxi=x[gyoker];
return;
}
int kozep=(jobb+bal)/2;
if(kozep>=a) lekermax(bal,kozep,gyoker*2,a,b);
if(kozep<b) lekermax(kozep+1,jobb,gyoker*2+1,a,b);
}
int main()
{
cin>>n>>m;
x.resize(4*n+1);
for(i=1;i<=n;++i)
{
cin>>a;
bemax(1,n,1,i,a);
}
//for(i=1;i<=4*n+1;++i)
// cout<<x[i]<<" ";
for(i=1;i<=m;++i)
{
cin>>p>>q>>r;
if(p==0)
{
maxi=-999999;
lekermax(1,n,1,q,r);
cout<<maxi<<"\n";
}
else bemax(1,n,1,q,r);
}
return 0;
}