#include <iostream>
#include <fstream>
#define nmax 100000
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arbore[4*nmax], i, j, n, x, y, m, nr, z;
void act(int a, int b, int nod, int poz, int val)
{
if (a==b)
{
arbore[nod]=val;
return;
}
else
{
int mij=(a+b)/2;
if (poz<=mij)
act(a, mij, nod*2, poz, val);
else
act(mij+1, b, nod*2+1, poz, val);
arbore[nod]=max(arbore[2*nod], arbore[2*nod+1]);
}
}
int que(int a, int b, int nod, int l, int r)
{
int r1=0;
int r2=0;
if (l<=a && r>=b)
return arbore[nod];
int mij=(a+b)/2;
if (l<=mij)
r1=que(a, mij, 2*nod, l, r);
if (mij<r)
r2=que(mij+1, b, 2*nod+1, l, r);
return max(r1, r2);
}
int main()
{
f>>n>>m;
for (i=1; i<=n; i++)
{
f>>x;
act(1, n, 1, i, x);
}
for (i=1; i<=m; i++)
{
f>>x>>y>>z;
if (x==1) act(1, n, 1, y, z);
else g<<que(1, n, 1, y, z)<<endl;
}
}