#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
class AINT
{
ll n;
vector<ll> v;
ll ask(ll st,ll dr,ll p,ll l,ll r)
{
if(l<=st&&r>=dr)return v[p];
ll mid=(st+dr)/2;
if(r<=mid)return ask(st,mid,p+1,l,r);
if(l>mid)return ask(mid+1,dr,p+2*(mid-st+1),l,r);
return max(ask(st,mid,p+1,l,r),ask(mid+1,dr,p+2*(mid-st+1),l,r));
}
public:
AINT(ll x=0){n=x;v.resize(2*n);}
void build(vector<ll>&a)
{
ll i;
for(i=1;i<=n;i++)v[n+i-1]=a[i];
for(i=n-1;i>0;i--)v[i]=max(v[2*i],v[2*i+1]);
}
void set(ll pz,ll val)
{
v[(pz+=n-1)]=val;
for(pz>>=1;pz>0;pz>>=1)v[pz]=max(v[2*pz],v[2*pz+1]);
}
ll ask(ll l,ll r)
{
ll rez=0;
for(l+=n-1,r+=n;l<r;l>>=1,r>>=1)
{
if(l&1)rez=max(rez,v[l++]);
if(r&1)rez=max(rez,v[--r]);
}
return rez;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
ll n,m,a,x,y,i;
cin>>n>>m;
vector<ll>v(n+1);
for(i=1;i<=n;i++)cin>>v[i];
AINT alex(n);
alex.build(v);
while(m--)
{
//cerr<<m<<endl;
cin>>a>>x>>y;
if(a==0)
{
cout<<alex.ask(x,y)<<'\n';
}
else
{
alex.set(x,y);
}
}
return 0;
}