#include <bits/stdc++.h>
using namespace std;
int N,M;
int rmqlen;
int v[100000], rmq[222222];
void inc(int ql, int qh, int l = 0, int h = N - 1, int pos = 0){
}
void build(int v[], int l = 0, int h = N - 1, int pos = 0){
if(l == h){
rmq[pos] = v[l];
}
else{
int mid = (l + h)/2;
build(v, l, mid, 2*pos + 1);
build(v, mid + 1, h, 2*pos + 2);
rmq[pos] = min(rmq[2*pos+1], rmq[2*pos+2]);
}
}
int RMQ(int ql, int qh, int l = 0, int h = N - 1, int pos = 0){
if(ql <= l && qh >= h)
return rmq[pos]; // total overlap;
if(ql > h || qh < l)
return 100001; // no overleap;
int mid = (l + h)/2;
return min(RMQ(ql, qh, l, mid, 2*pos+1), RMQ(ql, qh, mid+1, h, 2*pos + 2));
}
void update(int pos, int newvalue, int l = 0, int r = N - 1, int cpos = 1)
{
if(l == r)
{
rmq[cpos] = newvalue;
}
else{
int mid = (l + r)/2;
if(pos <= mid)
update(pos, newvalue, l, mid, cpos * 2+1);
else
update(pos, newvalue, l, mid, cpos * 2+2);
rmq[cpos] = max(rmq[cpos*2 + 1], rmq[cpos*2+1]);
}
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f >> N >> M;
rmqlen = N - 1;
rmqlen |= rmqlen >> 1;
rmqlen |= rmqlen >> 2;
rmqlen |= rmqlen >> 4;
rmqlen |= rmqlen >> 8;
rmqlen |= rmqlen >> 16;
rmqlen = 2*rmqlen + 1;
int i;
for(i = 0; i < N; i++){
f >> v[i];
if (i < rmqlen)
rmq[i] = 100001;
}
for(; i < rmqlen; i++)
rmq[i] = 100001;
build(v);
int x, y, type;
for (i = 0; i < M; i++){
f >> type >> x >> y;
if(type == 1)
update(x-1,y);
else
RMQ(x-1,y-1);
}
return 0;
}