#include<fstream>
using namespace std;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
int x,y,A[100],H[100],i,N,j,n;
bool b;
void build(int nod, int start, int end)
{
if(start==end){H[nod]=A[start]; return;}
int mid=(start+end)/2;
build(2*nod,start,mid);
build(2*nod+1,mid+1,end);
H[nod]=max(H[nod*2],H[nod*2+1]);
}
int query(int nod, int st, int dr)
{
if(st>=x && dr<=y)return H[nod];
int mid=(st+dr)/2;
int max_st=0, max_dr=0;
if(x<=mid)max_st=query(nod*2,st,mid);
if(y>mid)max_dr=query(nod*2+1,mid+1,dr);
if(max_st<max_dr) return max_dr;else return max_st;
}
void update(int nod, int st, int dr)
{
if(st==dr){H[nod]=y; return;}
int mid=(st+dr)/2;
if(x<=mid)update(nod*2,st,mid);
else update(nod*2+1,mid+1,dr);
if(H[nod*2]<H[nod*2+1]) H[nod]=H[nod*2+1];else H[nod]=H[nod*2];
}
int main()
{
fi >> N >> n;
for(i=1;i<=N;i++)
fi >> A[i];
build(1,1,N);
for(j=1; j<=n; j++)
{
fi >> b;
fi >> x >> y;
if(b) update(1,1,N);
else fo << query(1,1,n) << '\n';
}
}