#include<bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, c, x, y;
int v[400001];
int query(int lo, int hi, int st, int dr, int k){
//cout<<"query: "<<lo<<" "<<hi<<" ("<<st<<" "<<dr<<" "<<k<<")\n";
if(lo <= st && dr <= hi || st == dr) return v[k];
else{
int a=0, b=0, m = (st+dr)/2;
if(m >= lo) a = query(lo, hi, st, m, k*2+1);
if(m+1 <= hi) b = query(lo, hi, m+1, dr, k*2+2);
return max(a, b);
}
}
void update(int poz, int val, int st, int dr, int k){
//cout<<"update: "<<poz<<" "<<val<<" ("<<st<<" "<<dr<<" "<<k<<")\n";
if(st == dr) v[k] = val;
else{
int m = (st+dr)/2;
if(poz <= m) update(poz, val, st, m, k*2+1);
else update(poz, val, m+1, dr, k*2+2);
v[k] = max(v[k*2+1], v[k*2+2]);
}
}
int main(){
fin>>n>>m;
for(int i=1; i<=n; i++){
fin>>x;
update(i, x, 1, n, 0);
}
for(int i=1; i<=m; i++){
fin>>c>>x>>y;
if(c) update(x, y, 1, n, 0);
else fout<<query(x, y, 1, n, 0)<<"\n";
}
}