#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long long aint[400004],q,w,i,x,a,b;
int query(int n, int left, int right, int a, int b)
{
if (right<a || left>b)
return 0;
if (a<=left && right<=b)
return aint[n];
long long v1=-10000000, v2=-1000000;
int mid= (left+right)/2;
v1=query(2*n, left, mid, a, b);
v2=query(2*n+1, mid+1, right, a, b);
return max(v1,v2);
}
void update(int n, int left, int right, int pos, int val)
{
if (pos<left || pos>right)
return;
if (left==right)
{
aint[n]=val;
return;
}
int mid= (left+right)/2;
if (pos<=mid)
update(2*n, left, mid, pos, val);
else
update(2*n+1, mid+1, right, pos, val);
aint[n]= max(aint[2*n], aint[2*n+1]);
}
int main()
{
f>>q>>w; /// q= nr de elemente w=nr de operatii
for (i=1;i<=q;i++)
{
f>>x;
update(1,1,q,i,x);
}
for ( i = 1; i <= w; i++ )
{
f>>x >>a >>b;
if ( x == 0 )
g<<query(1,1,q,a,b)<<'\n';
else
update(1,1,q,a,b);
}
return 0;
}