#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int aint[400005];
int n,m,op,a,b;
int get_max(int pos,int st,int dr,int l,int r)
{
if(r<st || dr<l)
return 0;
if(l<=st && dr<=r)
return aint[pos];
int mid=(st+dr)/2;
return max(get_max(pos*2,st,mid,l,r),get_max(pos*2+1,mid+1,dr,l,r));
}
void update(int pos,int st,int dr,int elem,int val)
{
if(elem<st || dr<elem)
return;
if(st==dr)
{
aint[pos]=val;
return;
}
int mid=(st+dr)/2;
update(pos*2,st,mid,elem,val);
update(pos*2+1,mid+1,dr,elem,val);
aint[pos]=max(aint[pos*2],aint[pos*2+1]);
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>a;
update(1,1,n,i,a);
}
while(m--)
{
fin>>op>>a>>b;
if(op==0)
fout<<get_max(1,1,n,a,b)<<"\n";
else
update(1,1,n,a,b);
}
return 0;
}