using namespace std;
#include <cstdio>
#include <algorithm>
#define maxn 100001
#define DIM (1<<13)
int H[3*maxn], n,m,sol;
char ax[DIM];
int poz;
inline void cit(int &x)
{
x=0;
while(ax[poz]<'0' || ax[poz]>'9')
{
++poz;
if(poz==DIM) fread(ax, 1, DIM, stdin),poz=0;
}
while(ax[poz]>='0' && ax[poz]<='9')
{
x=x*10+ax[poz]-'0';
++poz;
if(poz==DIM) fread(ax, 1, DIM, stdin), poz=0;
}
}
inline void update(int n, int l, int r, int p, int v)
{
if(l>=r) {H[n]=v; return;}
int m=(l+r)>>1;
if(p<=m) update(n<<1, l, m, p, v);
else update((n<<1)|1, m+1, r, p, v);
H[n]=max(H[n<<1], H[(n<<1)|1]);
}
inline void query(int n, int l, int r, int a, int b)
{
if(a<=l && r<=b) {sol=max(sol, H[n]); return;}
int m=(l+r)>>1;
if(a<=m) query(n<<1, l, m, a,b);
if(b>m) query((n<<1)|1, m+1,r, a, b);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
cit(n); cit(m);
// scanf("%d %d\n", &n, &m);
int v,i;
for(i=1;i<=n;++i)
{
cit(v);
// scanf("%d ", &v);
update(1, 1, n, i, v);
}
int t, p,q;
while(m--)
{
cit(t); cit(p); cit(q);
//scanf("%d %d %d\n", &t,&p, &q);
if(t==0)
{
sol=0;
query(1, 1, n, p, q);
printf("%d\n", sol);
}
else update(1, 1, n, p, q);
}
return 0;
}