using namespace std;
#include<fstream>
#include<algorithm>
#include<cmath>
ifstream eu("arbint.in");
ofstream tu("arbint.out");
#define Nmax 100002
int IT[4*Nmax];
int N,M,QMax;
void Update(int nod,int L,int R,int &P,int &V)
{
int Mid=(L+R)/2;
if(L==R)
{
IT[nod]=V;
return;
}
if(P<=Mid)
Update(2*nod,L,Mid,P,V);
else
Update(2*nod+1,Mid+1,R,P,V);
IT[nod]=max(IT[2*nod],IT[2*nod+1]);
}
int Query(int nod,int L,int R,int &QL,int &QR)
{
int Mid=(L+R)/2;
if(QL<=L&&R<=QR)
return IT[nod];
if(QL<=Mid)
QMax=max(QMax,Query(2*nod,L,Mid,QL,QR));
if(QR>Mid)
QMax=max(QMax,Query(2*nod+1,Mid+1,R,QL,QR));
return QMax;
}
int main()
{
int op,val,a,b;
eu>>N>>M;
for(int poz=1;poz<=N;poz++)
{
eu>>val;
Update(1,1,N,poz,val);
}
while(M--)
{
eu>>op>>a>>b;
if(op==0)
{
QMax=-1;
tu<<Query(1,1,N,a,b)<<"\n";
}
if(op==1)
Update(1,1,N,a,b);
}
return 0;
}