#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int aint[1 << 17 + 1];
void update(int nod,int st,int dr,int val,int poz){
if(st == dr){
aint[nod] = val;
return;
}
int mid = (st + dr) / 2;
if(poz <= mid)
update(nod * 2,st,mid,val,poz);
else
update(nod * 2 + 1,mid + 1,dr,val,poz);
aint[nod] = max(aint[nod * 2],aint[nod * 2 + 1]);
}
int query(int nod,int a,int b,int st,int dr){
if(a <= st && dr <= b){
return aint[nod];
}
int stanga = -2e9;
int dreapta = -2e9;
int mid = (st + dr) / 2;
if(a <= mid)
stanga = query(2 * nod,a,b,st,mid);
if(b > mid)
dreapta = query(2 * nod + 1,a,b,mid + 1,dr);
return max(stanga,dreapta);
}
int main()
{
int n,m,x,i;
cin >> n >> m;
for(i = 1;i <= n;i++){
cin >> x;
update(1,1,n,x,i);
}
for(i = 1;i <= m;i++){
int c;
cin >> c;
if(c == 0){
int st ,dr;
cin >> st >> dr;
cout << query(1,st,dr,1,n) << "\n";
}else{
int poz,val;
cin >> poz >> val;
update(1,1,n,val,poz);
}
}
return 0;
}