#include <fstream>
using namespace std;
ifstream F("arbint.in");
ofstream G("arbint.out");
int n, m, v[100003], t[400003], j, x, y, z, ans, k, p;
const int inf = 1 << 30;
void upd(int rad, int st, int dr)
{
if(st == dr)
{
t[rad] = k;
return;
}
int mij = (st+dr)>>1;
if( p <= mij ) upd(2*rad, st, mij);
else upd(2*rad+1, mij + 1, dr);
t[rad] = max(t[2*rad], t[2*rad+1]);
}
void Max(int l, int r, int st, int dr, int rad)
{
if(l<=st && dr<=r)
{
ans = max(ans, t[rad]);
return;
}
if( l > dr || r < st ) return;
int mij = (st+dr)>>1;
Max( l, r, st, mij, 2*rad );
Max( l, r, mij+1, dr, 2*rad+1 );
}
int main()
{
F >> n >> m;
for( int i = 1; i <= n; ++ i )
{
F >> v[i];
k = v[i];
p = i;
upd(1, 1, n);
}
for( int i = 1; i <= m; ++ i )
{
F >> x >> y >> z;
if(!x)
{
ans = -inf;
Max(y, z, 1, n, 1);
G << ans << '\n';
}
else
{
k = z;
p = y;
upd(1, 1, n);
}
}
return 0;
}