#include <fstream>
#define maxx 100004
#define valm 1000000005
#include<algorithm>
#include<math.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long long int A[300001],maxim,valoare;
int m,n,op,a,b,poz;
void update(int i,int left,int right){
if(left==right){
A[i]=valoare;
}
else{
int mij=(left+right)/2;
if(poz<=mij){
update(2*i,left,mij);
}
else{
update(2*i+1,mij+1,right);
}
A[i]=max(A[2*i],A[2*i+1]);
}
}
void maxi(int i,int left,int right,long long int &maxim){
if(a<= left && b>=right){
maxim=max(maxim,A[i]);
return;
}
int mij=(left+right)/2;
if(b<=mij){
maxi(2*i,left,mij,maxim);
}
else{
if(a>mij){
maxi(2*i+1,mij+1,right,maxim);
}
else{
maxi(2*i,left,mij,maxim);
maxi(2*i+1,mij+1,right,maxim);
}
}
}
int main(){
f>>n>>m;
for(int i=1;i<=n;++i){
f>>a;
valoare=a;
poz=i;
update(1,1,n);
}
for(int i=1;i<=m;++i){
f>>op>>a>>b;
if(op==0){
maxim=0;
maxi(1,1,n,maxim);
g<<maxim<<"\n";
}
else{
poz=a;
valoare=b;
update(1,1,n);
}
}
return 0;
}