#include <bits/stdc++.h>
#define DIM 100005
using namespace std;
int Arb[4*DIM];
int N,Q,a,b,o,maxim;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void build(int nod,int p,int u){
if(p==u){
fin >> Arb[nod];
return;
}
int mid=(p+u)>>1;
build(2*nod,p,mid);
build(2*nod+1,mid+1,u);
Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}
void update(int nod,int p,int u,int a,int b){
if(p==u){
Arb[nod]=b;
return;
}
int mid=(p+u)>>1;
if(a<=mid)
update(2*nod,p,mid,a,b);
else
update(2*nod+1,mid+1,u,a,b);
Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}
void query(int nod,int p,int u,int a,int b){
if(p>=a && u<=b){
maxim=max(maxim,Arb[nod]);
return;
}
int mid=(p+u)>>1;
if(a<=mid)
query(2*nod,p,mid,a,b);
if(b>mid)
query(2*nod+1,mid+1,u,a,b);
}
int main(){
fin >> N >> Q;
build(1,1,N);
while(Q--){
fin >> o >> a >> b;
if(o==1)
update(1,1,N,a,b);
else{
maxim = 0;
query(1,1,N,a,b);
fout << maxim << "\n";
}
}
}