#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int t,a,b,x,n,m,ai[100001];
void update(int poz, int val, int nod, int st, int dr)
{
if(st==dr)
{
if(st==poz) ai[nod]=val;
}
else
{
int mij=(st+dr)/2;
if(st<=poz && poz<=mij) update(poz,val,2*nod,st,mij);
if(mij+1<=poz && poz<=dr) update(poz,val,2*nod+1,mij+1,dr);
ai[nod]=max(ai[2*nod],ai[2*nod+1]);
}
}
int query(int a, int b, int nod, int st, int dr)
{
if(a<=st && b>=dr)
return ai[nod];
int mij=(st+dr)/2;
if(mij<a) return query(a,b,2*nod+1,mij+1,dr);
if(mij>=b) return query(a,b,2*nod,st,mij);
return max(query(a,b,2*nod+1,mij+1,dr),query(a,b,2*nod,st,mij));
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>x;
update(i,x,1,1,n);
}
for(int i=1;i<=m;i++)
{
cin>>t>>a>>b;
if(t==0) cout<<query(a,b,1,1,n)<<'\n';
else update(a,b,1,1,n);
}
return 0;
}