#include <stdio.h>
#define N 1<<19
#define NMAX 1<<17
int n,m,arb[N],init[NMAX],tip,x,y;
inline int max(int a,int b)
{
if (a>b)
return a;
return b;
}
void cstr(int st, int dr, int poz){
if (st==dr){
init[st]=poz;
return;
}
int mij=(st+dr)/2;
cstr(st,mij,2*poz);
cstr(mij+1,dr,2*poz+1);
}
void update(int pozitie,int val){
int k=init[pozitie];
arb[k]=val;
for (k/=2; k>0; k/=2)
arb[k]=max(arb[2*k],arb[2*k+1]);
}
int caut(int st,int dr,int poz){
if (x<=st && dr<=y)
return arb[poz];
if (st>y || dr<x)
return 0;
int mij=(st+dr)/2;
return max(caut(st,mij,2*poz),caut(mij+1,dr,2*poz+1));
}
void read()
{
scanf("%d%d",&n,&m);
int i;
cstr(1,n,1);
for (i=1; i<=n; i++)
{
scanf("%d",&x);
update(i,x);
}
}
void solve()
{
int i;
for (i=1; i<=m; i++){
scanf("%d%d%d",&tip,&x,&y);
if (tip)
update(x,y);
else
printf("%d\n",caut(1,n,1));
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
read();
solve();
return 0;
}