#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int64_t v[1<<18];
int64_t n,p=1,r,a,b,c,m;
int get_max(int,int,int);
int main()
{
f>>n>>m;
while(p<n)
p*=2;
r=p-1;
for(int i=1;i<=n;i++)
f>>v[i+r];
for(int i=r;i>=1;i--)
v[i]=max(v[2*i],v[2*i+1]);
for(;m;m--)
{
f>>c>>a>>b;
if(c==0)
g<<get_max(1,1,p)<<'\n';
else
{
a+=r;
v[a]=b;
for(a/=2;a;a/=2)
v[a]=max(v[2*a],v[2*a+1]);
}
}
return 0;
}
int get_max(int nod,int lo,int hi)
{
if(a<=lo&&hi<=b)
return v[nod];
if(a>hi||lo>b)
return 0;
int mi=(lo+hi)/2;
return max(get_max(2*nod,lo,mi),get_max(2*nod+1,mi+1,hi));
}