#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n,m,i,x,v[1000005];
int a,b,q;
int query (int nod,int st, int dr) {
int qs=-1,qd=-1;
if (a<=st && b>=dr)
return v[nod];
int mid=(st+dr)/2;
if (a<=mid)
qs=query(2*nod,st,mid);
if (b>mid)
qd=query(2*nod+1,mid+1,dr);
return max(qs,qd);
}
void update (int nod, int st, int dr, int poz, int b) {
if (st==dr && st==poz) {
v[nod]=b;
return;
}
int mid=(st+dr)/2;
if (poz<=mid)
update(2*nod,st,mid,poz,b);
else
if (poz>mid)
update(2*nod+1,mid+1,dr,poz,b);
v[nod]=max(v[2*nod],v[2*nod+1]);
}
int main () {
fin>>n>>q;
for (i=1;i<=n;i++) {
fin>>x;
update(1,1,n,i,x);
}
while (q--) {
fin>>x>>a>>b;
if (x==0)
fout<<query(1,1,n)<<"\n";
else
update(1,1,n,a,b);
}
return 0;
}