#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <queue>
#include <deque>
#include <list>
#include <ctime>
#include <string>
#include <algorithm>
using namespace std;
ifstream ff("arbint.in");
ofstream gg("arbint.out");
int n, m, aa[1<<18];
void upd(int n, int l, int r, int p,int x){
if(l==r){ aa[n]=x; } else {
int m=(l+r)/2;
if(p<=m)upd(2*n, l, m, p, x); else
upd(2*n+1, m+1, r, p, x);
aa[n]=max(aa[2*n], aa[2*n+1]); }
}
void qry(int n,int l,int r, int a, int b, int& s){
if(a<=l&&r<=b){ s=max(s,aa[n]); } else {
int m=(l+r)/2;
if(a<=m)qry(2*n, l, m, a, b, s);
if(b>m)qry(2*n+1, m+1, r, a, b, s); }
}
int main(){
int x,y,s,op;
ff >> n >> m;
for(int i=1;i<=n;i++){
ff >> x;
upd(1,1,n,i,x);
}
for(int i=1;i<=m;i++){
ff >> op >> x >> y;
if(op){ upd(1,1,n,x,y); } else {
qry(1,1,n,x,y,s=0);
gg << s << "\n"; }
}
}