#include<cstdio>
#include<algorithm>
using namespace std;
int maxTree[262144],maxim;
void update(int root,int left,int right,int value,int position)
{
if(left==right)
{
maxTree[root]=value;
}
else
{
int middle=left+(right-left)/2;
if(position<=middle) update(2*root,left,middle,value,position);
else update(2*root+1,middle+1,right,value,position);
maxTree[root]=max(maxTree[2*root],maxTree[2*root+1]);
}
}
void query(int root,int left,int right,int a,int b)
{
if(a<=left&&right<=b)
{
maxim=max(maxTree[root],maxim);
}
else
{
int middle=left+(right-left)/2;
if(a<=middle) query(2*root,left,middle,a,b);
if(middle<b) query(2*root+1,middle+1,right,a,b);
}
}
int main()
{
int i,n,m,k,root=1,q,a,b;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&k);
update(root,1,n,k,i);
}
//for(i=1;i<=n;i++) printf("%d ",maxTree[i]);
for(;m;--m)
{
scanf("%d %d %d",&q,&a,&b);
maxim=-1;
if(q==0) {query(root,1,n,a,b); printf("%d\n",maxim);}
if(q==1) update(root,1,n,b,a);
}
return 0;
}