#include <fstream>
#include <cmath>
using namespace std;
long long rez=0, q_st=1, q_dr, n, m, i, k, a, b, aint[131072];
void update(long long nod, long long st, long long dr, long long poz, long long val){
if(st==dr)
aint[poz]=val;
int md=(st+dr)/2;
if(poz<=md)
update(2*nod, st, md, poz, val);
else
update(2*nod+1, md+1, dr, poz, val);
}
int query(long long nod, long long st, long long dr){
if(q_st<=st && q_dr>=dr){
if(aint[nod]>rez)
rez=aint[nod];
}
else if(q_dr<st || dr<q_st)
return 0;
else{
int md=(st+dr)/2;
query(2*nod, st, md);
query(2*nod+1, md+1, dr);
}
}
int main(){
ifstream fin("arbint.in");
ofstream fout("arbout.out");
fin >> n >> m;
q_dr=n;
for(i=1;i<=n;++i){
fin >> k;
update(1, i, i, i, k);
}
for(i=1;i<=m;++i){
fin >> k >> a >> b;
if(k==0){
rez=0;
query(1, a, b);
fout << rez << "\n";
}
else
update(1, a, a, a, b);
}
return 0;
}