#include <fstream>
#include <string>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[400005],i,j,n,m,a,b,mij,maxi;
void update(int st, int dr, int a, int b,int poz)
{
if(st == dr)
{
v[poz] = b;
return;
}
mij = (st + dr) / 2;
if(a > mij)
update(mij + 1, dr, a, b, poz*2 + 1);
else
update(st, mij, a , b, poz*2 );
v[poz] = max(v[poz * 2], v[poz * 2 + 1]);
}
void querry(int st,int dr, int poz)
{
int mij;
if(st >= a && dr <= b)
{
maxi = max(maxi, v[poz]);
return;
}
if(st > b || dr < a)
return;
mij = (st + dr) / 2;
querry( mij + 1, dr, poz*2 + 1);
querry( st, mij, poz*2);
}
int main()
{
fin >> n >> m;
for(i = 1; i <= n; i++)
{
fin >> b;
update(1, n, i, b, 1);
}
for(i = 1; i <= m; i++)
{
int p;
fin >> p >> a >> b;
if(p)
update(1, n, a, b, 1);
else
{
maxi = 0;
querry(1,n,1);
fout<<maxi<<"\n";
}
}
return 0;
}