#include <iostream>
#include <fstream>
#define mx 300010
using namespace std;
long n,a,b,op,i,m,s;
long w[mx];
long max(long a, long b)
{
long m;
m=a;
if (m<b) m=b;
return m;
}
void compar(long nod)
{
if (w[nod]>s) s=w[nod];
}
void adaug(long nod, long p, long u, long poz, long val)
{
long m;
if (p==u) w[nod]=val;
else
{
m=(p+u)/2;
if (poz<=m) adaug(2*nod,p,m,poz,val);
if (m<poz) adaug(2*nod+1,m+1,u,poz,val);
w[nod]=max(w[2*nod],w[2*nod+1]);
}
}
void query(long nod, long p, long u)
{
long m;
if (a<=p && u<=b)
{
compar(nod); return;
}
if (p<u)
{
m=(p+u)/2;
if (a<=m) query(2*nod,p,m);
if (m<b) query(2*nod+1,m+1,u);
}
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
for (i=1; i<=n; i++)
{
f>>a;
adaug(1,1,n,i,a);
}
for (i=1; i<=m; i++)
{
f>>op>>a>>b;
if (op==1) adaug(1,1,n,a,b);
else
{
s=0;
query(1,1,n);
g<<s<<"\n";
}
}
f.close();
g.close();
return 0;
}