#include <fstream>
#include <stdint.h>
#define nmax 100001
using namespace std;
fstream f1("arbint.in", ios::in);
fstream f2("arbint.out", ios::out);
int n, m, aint[4*nmax];
void update(int poz, int st, int dr, int p, int val)
{
if(st==dr) aint[poz]=val;
else
{
int mijl=(st+dr)/2;
if(p<=mijl) update(poz*2, st, mijl, p, val);
else update(poz*2+1, mijl+1, dr, p, val);
aint[poz]=max(aint[poz*2], aint[poz*2+1]);
}
}
int query(int poz, int st, int dr, int l, int r)
{
if((l<=st)&&(dr<=r)) return aint[poz];
else
{
int mijl=(st+dr)/2, max1, max2;
max1=0; max2=0; ////!!!!!!!!!!!!
if(l<=mijl) max1=query(poz*2, st, mijl, l, r);
if(mijl+1<=r) max2=query(poz*2+1, mijl+1, dr, l, r);
return max(max1, max2);
}
}
int main()
{
int i, x, tip, aa, b;
f1>>n>>m;
for(i=1; i<=n; i++)
{
f1>>x;
update(1, 1, n, i, x);
}
for(i=1; i<=m; i++)
{
f1>>tip>>aa>>b;
if(tip==0)
f2<<query(1, 1, n, aa, b)<<"\n"; ///atentie, valori pozitive !
else
update(1, 1, n, aa, b);
}
return 0;
}