#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int aint[4*MAXN];
void update(int node, int l, int r, int poz, int val)
{
if(l==r)
{
aint[node]=val;
return;
}
int mid=(l+r)/2;
if(poz<=mid) update(node*2,l,mid,poz,val);
else update(node*2+1,mid+1,r,poz,val);
aint[node]=max(aint[node*2],aint[node*2+1]);
}
int query(int node, int l, int r, int ql, int qr)
{
int maxx=0;
if(ql<=l&&r<=qr) return aint[node];
int mid=(l+r)/2;
if(ql<=mid)
{
int st=query(node*2,l,mid,ql,qr);
maxx=max(maxx,st);
}
if(qr>=mid+1)
{
int dr=query(node*2+1,mid+1,r,ql,qr);
maxx=max(maxx,dr);
}
return maxx;
}
signed main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,q;
cin>>n>>q;
for(int i=1;i<=n;++i)
{
int a;cin>>a;
update(1,1,n,i,a);
}
while(q--)
{
int op;cin>>op;
if(op)
{
int poz,val;cin>>poz>>val;
update(1,1,n,poz,val);
}
else
{
int l,r;cin>>l>>r;
cout<<query(1,1,n,l,r)<<'\n';
}
}
}