#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int A[100001];
int arb[200002];
int n,m;
void create_AI(int nod, int st, int dr)
{
int mij = (st+dr)/2;
if(st == dr)
{
arb[nod] = A[st];
}
else if(st<dr)
{
create_AI(2*nod,st,mij);
create_AI(2*nod+1,mij+1,dr);
arb[nod] = max(arb[2*nod],arb[2*nod+1]);
}
}
void update(int nod, int poz, int val, int st, int dr)
{
if(st == dr)
{
arb[nod] = val;
return;
}
int mij = (st+dr)/2;
if(st<=poz && poz<=mij)
update(2*nod,poz,val,st,mij);
else if(mij+1<=poz && poz<=dr)
update(2*nod+1,poz,val,mij+1,dr);
arb[nod] = max(arb[2*nod],arb[2*nod+1]);
}
int query(int nod, int st, int dr, int qa, int qb )
{
int mij = (st+dr)/2;
if(qa == st && qb == dr)
return arb[nod];
if(st == dr)
return arb[st];
if(mij >= qb)
return query(2*nod, st, mij, qa, qb);
else if(mij +1 <= qa)
return query(2*nod+1, mij+1, dr, qa, qb);
else
return max(query(2*nod,st,mij,qa,mij),query(2*nod+1,mij+1,dr,mij+1,qb));
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>A[i];
create_AI(1,1,n);
for(int i=1;i<=m;i++)
{
int op,a,b;
fin>>op>>a>>b;
if(op == 1)
update(1,a,b,1,n);
else fout<<query(1,1,n,a,b)<<'\n';
}
fin.close();
fout.close();
return 0;
}