#include <cstdio>
#include <algorithm>
#define N 100001
using namespace std;
int v[N],T[4*N];
int n;
void create(int st=1,int dr=n,int nod=1)
{
if(st==dr)
{
T[nod] = v[st];
return ;
}
create(st,(st+dr)/2,nod*2);
create((st+dr)/2+1,dr,nod*2+1);
T[nod] = max(T[nod*2],T[nod*2+1]);
}
void update(int val,int pos,int st=1,int dr=n,int nod=1)
{
if(st==dr)
{
T[nod]=val;
return ;
}
if(pos<=(st+dr)/2)
update(val,pos,st,(st+dr)/2,nod*2);
else
update(val,pos,(st+dr)/2+1,dr,nod*2+1);
T[nod] = max(T[nod*2],T[nod*2+1]);
}
int getmax(int a,int b,int st=1,int dr=n,int nod=1)
{
if(a>dr) return 0;
if(b<st) return 0;
if(a<=st && dr<=b) return T[nod];
return max( getmax(a,b,st,(st+dr)/2,nod*2), getmax(a,b,(st+dr)/2+1,dr,nod*2+1) );
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
create();
//printf("%d\n",getmax(1,n));
for(int i=0;i<m;++i)
{
int q,a,b;
scanf("%d %d %d",&q,&a,&b);
if(q==1) update(b,a);
else printf("%d\n",getmax(a,b));
}
return 0;
}