#include <iostream>
#include <cstdio>
using namespace std;
FILE* f=fopen("arbint.in","r");
FILE* g=fopen("arbint.out","w");
int n,m,a[263000],val,poz,mx,first,second;
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
void update(int rad,int st,int dr)
{
if(st==dr)
{
a[rad]=val;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
update(rad*2,st,mij);
if(poz>mij)
update(rad*2+1,mij+1,dr);
a[rad]=maxim(a[2*rad],a[2*rad+1]);
}
void parc(int rad,int st,int dr)
{
if(first <= st and dr <= second)
{
if(mx<a[rad])
mx=a[rad];
return;
}
int mij=(st+dr)/2;
if(mij>=first)
parc(2*rad,st,mij);
if(mij<second)
parc(2*rad+1,mij+1,dr);
}
int main()
{
fscanf(f,"%d%d", &n,&m);
for(int i=1;i<=n;i++)
{
poz=i;
fscanf(f,"%d", &val);
update(1,1,n);
}
for(int i=1;i<=m;i++)
{
int t,x,y;
fscanf(f,"%d%d%d", &t,&x,&y);
if(t==0)
{
mx=0;
first=x;
second=y;
parc(1,1,n);
fprintf(g,"%d\n",mx);
}
else
{
poz=x;
val=y;
update(1,1,n);
}
}
return 0;
}