// MAXori intervale - O(logN) pe operatie
#include <fstream>
#define NMAX 100099
#define oo 2000000000
using namespace std;
ifstream f("MAXint.in");
ofstream g("MAXint.out");
int N,M,v[NMAX],MAX[4*NMAX], MIN[4*NMAX],sol,A,B,x,y,val,op;
void Update(int node, int st, int dr)
{
if (A <= st && dr <= B)
{
MAX[node] = MIN[node] = val;
return;
}
int mij = (st + dr) >> 1, left = node << 1, right=left + 1;
if (A <= mij) Update(left, st, mij);
else Update(right, mij + 1, dr);
if (MAX[left] > MAX[right])MAX[node] = MAX[left];
else MAX[node] = MAX[right];
if (MIN[left] < MIN[right])MAX[node] = MAX[left];
else MAX[node] = MAX[right];
}
void Query(int node, int st, int dr)
{
if(A <= st && dr <= B)
{
if (sol < MAX[node]) sol = MAX[node];
if (sol > MIN[node]) sol = MIN[node];
return;
}
int mij = (st + dr) >> 1, left = node << 1, right=left + 1;
if (A <= mij) Query(left, st, mij);
if (mij < B) Query(right, mij + 1, dr);
}
int main()
{
f>> N >> M;
for(int i=1;i<=N;++i)
f >> val , A = B = i , Update(1, 1, N);
for(int i=1;i<=M;++i)
{
f>>op>>x>>y;
if(op == 1) A = B = x , val = y , Update(1, 1, N);
else A=x , B=y, sol=0, Query(1,1,N) ,g<<sol<<'\n';
}
f.close();g.close();
return 0;
}