#include <fstream>
#define INF 2147483647
#define NMAX 262144
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int V[NMAX],N,T;
inline int _max(int a,int b){if(a>b)return a;return b;}
void Init()
{
for(int i=0;i< (N<<1)+1; i++)
V[i] = -INF;
}
void Insert(int p,int poz,int s,int f,int val)
{
if(s == f)
V[p] = val;
else
{
int med = (s+f)/2;
if(poz<=med)
Insert(p*2,poz,s,med,val);
else
Insert(p*2+1,poz,med+1,f,val);
V[p] = _max(V[2*p],V[2*p+1]);
}
}
int Query(int p,int s,int f,int a,int b)
{
int med = (s+f)/2,v1 = -INF ,v2 = -INF ;
if(s>=a&&f<=b)
return V[p];
if(med>=a)
v1 = Query(p*2,s,med,a,b);
if(med<b)
v2 = Query(p*2+1,med+1,f,a,b);
return _max(v1,v2);
}
int main()
{
int i,x,op,a,b;
in>>N>>T;
for(i=1;i<=N;i++)
in>>x,Insert(1,i,1,N,x);
while(T--)
{
in>>op>>a>>b;
if(op)
Insert(1,a,1,N,b);
else
{
out<<Query(1,1,N,a,b)<<'\n';
}
}
return 0;
}