#include <stdio.h>
using namespace std;
int copac[200000], a, b;
int max(int a, int b){
if(a<b)
return b;
return a;
}
void add(int nod, int st, int dr){
if(st==dr && st==a){
copac[nod]=b;
return;
}
if(a<=(dr-st)/2+st)
add(2*nod,st,(dr-st)/2+st);
else
add(2*nod+1,(dr-st)/2+st+1,dr);
copac[nod]=max(copac[2*nod+1],copac[2*nod]);
}
int query(int nod, int st, int dr){
if(a<=st && dr<=b)
return copac[nod];
int rez=0;
if(a<=(dr-st)/2+st)
rez=query(2*nod,st,(dr-st)/2+st);
if(b>=(dr-st)/2+st+1)
rez=max(rez,query(2*nod+1,(dr-st)/2+st+1,dr));
return rez;
}
int main()
{
int n, m, i, c;
FILE *fi=fopen("arbint.in", "r"), *fo=fopen("arbint.out", "w");
fscanf(fi, "%d%d", &n, &m);
for(i=1;i<=n;i++){
fscanf(fi, "%d", &b);
a=i;
add(1,1,n);
}
for(i=1;i<=m;i++){
fscanf(fi, "%d%d%d", &c, &a, &b);
if(c==0)
fprintf(fo, "%d\n", query(1,1,n));
else
add(1,1,n);
}
fclose(fi);
fclose(fo);
return 0;
}