#include <fstream>
#define INF 2147483647
#define NMAX 262144
#define LS(p) (p<<1)
#define RS(p) ((p<<1)+1)
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 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(LS(p),poz,s,med,val);
else
Insert(RS(p),poz,med+1,f,val);
V[p] = _max(V[LS(p)],V[RS(p)]);
}
}
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(LS(p),s,med,a,b);
if(med<b)
v2 = Query(RS(p),med+1,f,a,b);
return _max(v1,v2);
}
int main()
{
int i,x,a,b;
bool op;
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;
}