//FUCK YOU INFOARENA
#include <cstdio>
#define dmax 1000000010
using namespace std;
int v[400100],maxim;
inline int max(int a, int b)
{
return a>b?a:b;
}
void update(int nod, int poz, int x, int st, int dr)
{
if (st==dr) v[nod]=x;
else {
int m=st+(dr-st)/2;
if (poz<=m) update(2*nod,poz,x,st,m);
else update(2*nod+1,poz,x,m+1,dr);
v[nod]=max(v[2*nod],v[2*nod+1]);
}
}
int query(int nod, int st, int dr, int a, int b)
{
int x=0,y=0;
if (st>=a && dr<=b) maxim=max(maxim,v[nod]);
else {
int m=st+(dr-st)/2;
if (m>=a) maxim=max(maxim,query(2*nod,st,m,a,b));
if (m+1<=b) maxim=max(maxim,query(2*nod+1,m+1,dr,a,b));
return maxim;
}
}
int main()
{
int n,m,x,y,z;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d", &n, &m);
for (int i=1;i<=n;i++)
{
scanf("%d", &x);
update(1,i,x,1,n);
}
for (int i=1;i<=m;i++)
{
scanf("%d%d%d", &x, &y, &z);
if (x==0) {
maxim=0;
query(1,1,n,y,z);
printf("%d\n",maxim);
}
if (x==1) update(1,y,z,1,n);
}
return 0;
}