#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int NM=100001, Inf=(1<<31)-1;
int N,M,v[4*NM],a[NM];
void build (int n, int x, int y) {
if (x==y) {
v[n]=a[x];
} else {
int mij=(x+y)/2;
build (n*2,x,mij);
build (n*2+1,mij+1,y);
v[n]=max(v[n*2],v[n*2+1]);
}
}
int maxim (int n, int x, int y, int l, int r) {
if (l>r) return -Inf;
if (l==x&&r==y) return v[n];
int mij=(x+y)/2;
return max(maxim(n*2,x,mij,l,min(r,mij)),maxim(n*2+1,mij+1,y,max(l,mij+1),r));
}
void update (int n, int x, int y, int pos, int val) {
if (x==y) v[n]=val;
else {
int mij=(x+y)/2;
if (pos<=mij) {
update(n*2,x,mij,pos,val);
} else {
update(n*2+1,mij+1,y,pos,val);
}
v[n]=max(v[n*2],v[n*2+1]);
}
}
int main()
{
fin>>N>>M;
for (int i=1;i<=N;i++) {
fin>>a[i];
}
build(1,1,N);
for (int i=1;i<=M;i++) {
int x,y,z;
fin>>x>>y>>z;
if (x==0) {
fout<<maxim(1,1,N,y,z)<<'\n';
} else {
a[y]=z;
update(1,1,N,y,z);
}
}
return 0;
}