#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N=100005;
const int INF=999999999;
int n,m,t[N*4];
void modific(int currentPos, int left, int right, int pos, int value)
{
if(left == right)
{
t[currentPos] = value;
return;
}
int m = (left + right) / 2;
if(pos <= m)
{
modific(currentPos * 2, left, m, pos, value);
}
else
{
modific(currentPos * 2 + 1, m + 1, right, pos, value);
}
t[currentPos] = max(t[currentPos * 2],t[currentPos * 2 + 1]);
}
int interogare(int currentPos, int left, int right, int leftQuery, int rightQuery)
{
if(left >= leftQuery && right <= rightQuery)
{
return t[currentPos];
}
int m = (left + right) / 2,m1,m2;
if(leftQuery <= m)
m1 = interogare(currentPos * 2, left, m, leftQuery, rightQuery);
else
m1 = -INF;
if(rightQuery > m)
m2 = interogare(currentPos * 2 + 1, m + 1, right, leftQuery, rightQuery);
else
m2 = -INF;
return max(m1,m2);
}
int main()
{
int i,x,y,tip,j;
in>>n>>m;
for(i=1; i<=n; i++)
{
in>>x;
modific(1,1,n,i,x);
}
/*for(i=1; i<=2*n; i++)
out<<t[i]<<" ";*/
for(i=1; i<=m; i++)
{
in>>tip>>x>>y;
if(tip==0)
{
out<<interogare(1,1,n,x,y)<<'\n';
}
else
modific(1,1,n,x,y);
}
return 0;
}