#include <cstdio>
#include<algorithm>
using namespace std;
int vv[100005];
int t[400005];
void build(int v,int tl , int tr)
{
if(tl==tr)
t[v]=vv[tl];
else
{
int tm=(tl+tr)/2;
build(2*v,tl,tm);
build(2*v+1,tm+1,tr);
t[v]=max(t[2*v],t[2*v+1]);
}
}
int getmax(int v, int tl , int tr ,int l , int r)
{
if(l>r)
return -1;
if(l==tl && r==tr)
return t[v];
int tm=(tl+tr)/2;
return max(getmax(2*v,tl,tm,l,min(r,tm)),getmax(2*v+1,tm+1,tr,max(l,tm+1),r));
}
void update(int v,int tl , int tr, int pos,int val)
{
if(tl==tr)
t[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);
t[v]=max(t[2*v],t[2*v+1]);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,m;
scanf("%d",&n);
scanf("%d",&m);
for(int i=1;i<=n;i++)
scanf("%d",&vv[i]);
build(1,1,n);
for(int i=1;i<=m;i++)
{
int t,a,b;
scanf("%d%d%d",&t,&a,&b);
if(t==0)
printf("%d\n",getmax(1,1,n,a,b));
else
update(1,1,n,a,b);
}
return 0;
}