#include <cstdio>
#include <algorithm>
using namespace std;
#define nm 200100
FILE *f,*g;
int arb[nm];
int n,m,x,pos,y;
void update(int nod,int st, int dr) {
int m;
if (st==dr){
arb[nod]=x;
return;
}
m=(st+dr)/2;
if (pos<=m)
update(nod*2,st,m);
if (pos>m)
update(nod*2+1,m+1,dr);
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
int query (int nod,int st,int dr) {
int v1,v2;
if (x<=st && dr<=y) return arb[nod];
int m=(st+dr)/2;
return max( (x<=m?query(nod*2,st,m):0), (y>m?query(nod*2+1,m+1,dr):0) );
}
void read() {
int i;
f=fopen("arbint.in","r");
g=fopen("arbint.out","w");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++) {
fscanf(f,"%d",&x);
pos=i;
update(1,1,n);
}
}
void solve() {
int i,z,a,b;
for (i=1;i<=m;i++) {
fscanf(f,"%d%d%d",&z,&a,&b);
if (z==0) {
x=a;
y=b;
fprintf(g,"%d\n",query(1,1,n));
}
else {
x=b;
pos=a;
update(1,1,n);
}
}
}
int main() {
read();
solve();
fclose(g);
return 0;
}