#include <bits/stdc++.h>
#define dim 100001
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m;
int a[4*dim + 66];
int x, y, val , z, pos, stanga, dreapta, maxim;
void Update(int nod ,int st, int dr, int pos, int val)
{
if(st == dr)
{
a[nod] = val;
return;
}
int mid = (st + dr) /2;
if( pos <= mid)
{
Update(2*nod, st, mid, pos, val);
}
else
{
Update(2*nod+1, mid+1, dr, pos, val);
}
a[nod] = max(a[2*nod], a[2*nod + 1]);
}
void Query(int nod, int st, int dr, int stanga, int dreapta)
{
if(stanga <= st and dr <= dreapta)
{
maxim = max(maxim, a[nod]);
return;
}
int mid = (st+dr)/2;
if(stanga <=mid)
{
Query(2*nod, st, mid, stanga, dreapta);
}
if(dreapta > mid)
{
Query(2*nod+1, mid+1, dr, stanga, dreapta);
}
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++)
{
in>>x;
Update(1, 1, n, i , x);
}
for(int i=1;i<=m;i++)
{
in>>x>>y>>z;
if(x == 0)
{
maxim = -1;
Query(1, 1, n, y, z);
out<<maxim<<'\n';
}
else
{
Update(1, 1, n, y, z);
}
}
}