#include <bits/stdc++.h>
int poz;
int v[265000];
int maxim(int a, int b){
if(a>b)
return a;
return b;
}
void update(int i){
if(i!=1){
i/=2;
v[i]=maxim(v[i*2], v[i*2+1]);
update(i);
}
}
int calcul(int st, int dr, int i, int j, int x){
if(st<=i && dr>=j)
return v[x];
if(st>j || dr<i)
return 0;
return maxim(calcul(st, dr, i, (i+j)/2, x*2), calcul(st, dr, (i+j)/2+1, j, x*2+1));
}
int main(){
FILE *fin, *fout;
int n, m, i, t, a, b;
fin=fopen("arbint.in", "r");
fout=fopen("arbint.out", "w");
fscanf(fin, "%d%d", &n, &m);
poz=1;
while(poz<n)
poz*=2;
for(i=1;i<=n;i++){
fscanf(fin, "%d", &v[poz+i-1]);
update(poz+i-1);
}
for(i=0;i<m;i++){
fscanf(fin, "%d%d%d", &t, &a, &b);
if(t==1){
v[poz+a-1]=b;
update(poz+a-1);
}
else
fprintf(fout, "%d\n", calcul(a, b, 1, poz, 1));
}
fclose(fin);
fclose(fout);
return 0;
}