#include<stdio.h>
#include<vector>
#define Nmax 100001
#define max(a,b) ((a>b) ? a:b)
using namespace std;
int i,N,x,M,y,type,Max;
vector<int> H(4*Nmax);
void Update(int nod,int st,int dr,int elem,int val)
{
int m=(st+dr)/2;
if (st==dr)
{
H[nod]=val;
return;
}
if (m>=elem) Update(2*nod,st,m,elem,val);
else Update(2*nod+1,m+1,dr,elem,val);
H[nod]=max(H[2*nod],H[2*nod+1]);
}
void Query(int nod,int st,int dr,int x,int y)
{
int m=(st+dr)/2;
if (x<=st&&dr<=y) Max=max(Max,H[nod]);
if (st==dr) return;
if (x<=m) Query(2*nod,st,m,x,y);
if (y>m) Query(2*nod+1,m+1,dr,x,y);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&N,&M);
for (i=1;i<=N;i++)
{
scanf("%d",&x);
Update(1,1,N,i,x);
}
for (i=1;i<=M;i++)
{
scanf("%d%d%d",&type,&x,&y);
if (type==1) Update(1,1,N,x,y);
else
{
Max=0;
Query(1,1,N,x,y);
printf("%d\n",Max);
}
}
}