#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,ans,p,x,y,v[400010];
void update(int nod, int st, int dr, int poz, int x)
{
if(st==dr)
{
v[nod]=x;
return;
}
int mid=(st+dr)>>1;
if(poz<=mid)
update(2*nod, st, mid, poz, x);
else
update(2*nod+1, mid+1, dr, poz, x);
v[nod]=max(v[2*nod], v[2*nod+1]);
}
void query(int nod,int st, int dr, int a, int b)
{
if(a <= st && dr <= b)
{
ans=max(ans, v[nod]);
return;
}
int mid=(st+dr)>>1;
if(a<=mid)
query(2*nod, st, mid, a, b);
if(b>mid)
query(2*nod+1, mid+1, dr, a, b);
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)
{
f>>x;
update(1, 1, n, i, x);
}
for(int i=1;i<=m;++i)
{
f>>p>>x>>y;
if(p)
update(1, 1, n, x, y);
else
{
ans=-1;
query(1, 1, n, x, y);
g<<ans<<'\n';
}
}
return 0;
}