#include<bits/stdc++.h>
using namespace std;
int n,m,aint[400001];
int a[100001];
int query(int v, int tl, int tr, int l, int r)
{
if(l>r)
return 0;
if(l==tl&&r==tr)
return aint[v];
int tm=(tl+tr)/2;
return max(query(v*2, tl, tm, l, min(r,tm)),query(v*2+1, tm+1, tr, max(l,tm+1), r));
}
void update(int v, int tl, int tr, int pos, int val)
{
if(tl==tr)
aint[v]=val;
else
{
int tm=(tl+tr)/2;
if(pos<=tm)
update(v*2,tl,tm,pos,val);
else
update(v*2+1,tm+1,tr,pos,val);
aint[v]=max(aint[v*2],aint[v*2+1]);
}
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
update(1,1,n,i,a[i]);
}
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
if(x==0)
cout<<query(1,1,n,y,z)<<endl;
else
update(1,1,n,y,z);
}
}