#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <functional>
#include <utility>
#include <tuple>
#include <cctype>
//#define INF 0x3f3f3f3f
#define MOD 1000000007
#define PI 4*atan(1.0)
typedef long long ll;
typedef long double ld;
using namespace std;
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
const int SIZE=100050;
# define int ll
const int INF=2147483647;
//int arr[SIZE]={};
//???????????§???????????¬
//???????°????????±???????SegmentTree
struct SegmentTreeMin {
private:
    int n;
    vector<int> node;

public:
    // ????????? v ????????°???????????¨??§??¨?????????
    SegmentTreeMin(vector<int> v) {
        // ???????????????????????°??????????????????????????\????????????????°???? 2 ??? -> ????????? n ??¨??????
        // ?????°???????????¨??¨?????§????????????????????°??? 2n-1 ?????§??????
        int sz = v.size();
        n = 1; while(n < sz) n *= 2;
        node.resize(2*n-1, INF);

        // ????????????????????\???????????¨??????????????????????????????????????\??????
        // ????????\?????????????????????????????? 2 ???????????§????????°??????
        for(int i=0; i<sz; i++) node[i+n-1] = v[i];
        for(int i=n-2; i>=0; i--) node[i] = min(node[2*i+1], node[2*i+2]);
    }
	void update(int x, int val) {
		// ??????????????????????????¢???????????????
		x += (n - 1);

		// ??????????????????????????´??°?????????????????¨??????????????£?????´??°????????????
		node[x] = val;
		while(x > 0) {
			x = (x - 1) / 2;
			node[x] = min(node[2*x+1], node[2*x+2]);
		}
	}
	int getmin(int a, int b, int k=0, int l=0, int r=-1) {
		// ?????????????????????????????¨??????????±?????????? [0, n)
		if(r < 0) r = n;

		// ????±?????????¨????±????????????????????????? -> ???????????????
		if(r <= a || b <= l) return INF;

		// ????±??????????????±???????????????¨????¢???? -> ????±????????????????????¨?????????????
		if(a <= l && r <= b) return node[k];

		// ????±??????????????±???????????????¨????¢???? -> ?????????????????¢?´¢?????????
		// ?????´????????? vl ??? ?????´????????? vr ??¨????????????
		// ??°??????????±??????????????????¨???????±????????????????????????£?????????
		int vl = getmin(a, b, 2*k+1, l, (l+r)/2);
		int vr = getmin(a, b, 2*k+2, (l+r)/2, r);
		return min(vl, vr);
	}
};
//???????°????????±???????SegmentTree

//????????§???????±???????SegmentTree
struct SegmentTreeMax {
private:
    int n;
    vector<int> node;

public:
    // ????????? v ????????°???????????¨??§??¨?????????
    SegmentTreeMax(vector<int> v) {
        // ???????????????????????°??????????????????????????\????????????????°???? 2 ??? -> ????????? n ??¨??????
        // ?????°???????????¨??¨?????§????????????????????°??? 2n-1 ?????§??????
        int sz = v.size();
        n = 1; while(n < sz) n *= 2;
        node.resize(2*n-1, 0);

        // ????????????????????\???????????¨??????????????????????????????????????\??????
        // ????????\?????????????????????????????? 2 ???????????§????????°??????
        for(int i=0; i<sz; i++) node[i+n-1] = v[i];
        for(int i=n-2; i>=0; i--) node[i] = max(node[2*i+1], node[2*i+2]);
    }
	void update(int x, int val) {
		// ??????????????????????????¢???????????????
		x += (n - 1);

		// ??????????????????????????´??°?????????????????¨??????????????£?????´??°????????????
		node[x] = val;
		while(x > 0) {
			x = (x - 1) / 2;
			node[x] = max(node[2*x+1], node[2*x+2]);
		}
	}
	int getmax(int a, int b, int k=0, int l=0, int r=-1) {
		// ?????????????????????????????¨??????????±?????????? [0, n)
		if(r < 0) r = n;

		// ????±?????????¨????±????????????????????????? -> ???????????????
		if(r <= a || b <= l) return 0;

		// ????±??????????????±???????????????¨????¢???? -> ????±????????????????????¨?????????????
		if(a <= l && r <= b) return node[k];

		// ????±??????????????±???????????????¨????¢???? -> ?????????????????¢?´¢?????????
		// ?????´????????? vl ??? ?????´????????? vr ??¨????????????
		// ??°??????????±??????????????????¨???????±????????????????????????£?????????
		int vl = getmax(a, b, 2*k+1, l, (l+r)/2);
		int vr = getmax(a, b, 2*k+2, (l+r)/2, r);
		return max(vl, vr);
	}
};
//????????§???????±???????SegmentTree

vector<int> node;
signed main(){
	int N,Q;
	cin>>N>>Q;
	for(int i=0;i<N;i++){
		node.push_back(INF);
	}
	SegmentTreeMin mini(node);
	for(int i=0;i<Q;i++){
		int a,b,c;
		cin>>a>>b>>c;
		if(a){
			cout<<mini.getmin(b,c+1)<<endl;
		}
		else{
			mini.update(b,c);
		}
	}
	return 0;
}

Measured memory_bytes: 6500