#include<stdio.h>
#define maxim -1
FILE *f=fopen("arbint.in","r"), *g=fopen("arbint.out","w");
int H[4*100001+66],i,ii,jj,q,poz,val,n,m,j,x;
inline int max(int a, int b)
{
if(a>b) return a;
return b;
}
void update(int n, int l, int r, int poz, int val)
{
if(l==r) {H[n]=val; return;}
else
{
int m=(l+r)>>1, L=n<<1, R=L+1;
if(poz<=m) update(L, l, m, poz, val);
else update(R, m+1, r, poz, val);
H[n]=max(H[L],H[R]);
}
}
inline int query(int n, int l, int r, int ii, int jj)
{
if(ii<=l&&r<=jj) return H[n];
else
{
int m=(l+r)>>1, L=n<<1, R=L+1, sol=maxim;
if(ii<=m) sol=max(sol, query(L,l,m,ii,jj));
if(m<jj) sol=max(sol, query(R, m+1,r, ii,jj));
return sol;
}
}
int main()
{
/*freopen("arbint,in","rt",stdin);
freopen("arbint.out","wt",stdout);*/
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
update(1,1,n,i,x);
}
for(j=1;j<=m;j++)
{
fscanf(f,"%d",&q);
if(q==0)
{
fscanf(f,"%d %d",&ii,&jj);
fprintf(g,"%d\n",query(1,1,n,ii,jj));
}
else
{
fscanf(f,"%d %d",&poz,&val);
update(1,1,n,poz,val);
}
}
fclose(f);
fclose(g);
return 0;
}