#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#define llint long long
#define inf 1e18

using namespace std;
typedef pair<llint, llint> P;

llint n, Q;
llint a[100005], b[100005];
llint a2[100005], b2[100005], dif[100005];
llint Amin[100005], Bmin[100005];
llint add[100005];
const int B = 300;

void calc(llint l, llint r, llint x)
{
	llint bid = l/B, L = bid*B, R = min(n, (bid+1)*B);
	for(int i = l; i <= r; i++) a[i] += x;
	for(int i = L; i < R; i++) a[i] += add[bid];
	add[bid] = 0;
	
	vector<P> vec;
	for(int i = L; i < R; i++){
		vec.push_back(P(a[i]-b[i], i));
	}
	sort(vec.begin(), vec.end());
	
	for(int i = 0; i < vec.size(); i++){
		llint p = L + i;
		dif[p] = vec[i].first;
		a2[p] = a[vec[i].second], b2[p] = b[vec[i].second];
	}
	llint mn = inf;
	for(int i = L; i < R; i++){
		mn = min(mn, b2[i]);
		Bmin[i] = mn;
	}
	mn = inf;
	for(int i = R-1; i >= L; i--){
		mn = min(mn, a2[i]);
		Amin[i] = mn;
	}
}

llint get(llint l, llint r)
{
	llint ret = inf, bid = l/B;
	for(int i = l; i <= r; i++){
		ret = min(ret, max(a[i]+add[bid], b[i]));
	}
	return ret;
}

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> Q;
	for(int i = 0; i < n; i++) cin >> a[i] >> b[i];
	for(int i = 0; i < n/B; i++) calc(i*B, (i+1)*B-1, 0);
	calc(n/B*B, n-1, 0);
	
	/*for(int i = 0; i < n; i++) cout << a[i] << " "; cout << endl;
	for(int i = 0; i < n; i++) cout << b[i] << " "; cout << endl;
	for(int i = 0; i < n; i++) cout << a2[i] << " "; cout << endl;
	for(int i = 0; i < n; i++) cout << b2[i] << " "; cout << endl;
	for(int i = 0; i < n; i++) cout << dif[i] << " "; cout << endl;
	for(int i = 0; i < n/B; i++) cout << add[i] << " "; cout << endl;*/
	
	llint t, l, r, x;
	for(int q = 1; q <= Q; q++){
		//cout << "Q " << q << endl;
		cin >> t >> l >> r;
		l--, r--;
		llint L = (l+B-1)/B*B, R = r/B*B;
		if(t == 1){
			cin >> x;
			if(l/B == r/B){
				calc(l, r, x);
				continue;
			}
			calc(l, L-1, x);
			calc(R, r, x);
			for(int i = L/B; i < R/B; i++) add[i] += x;
		}
		else{
			llint ans = inf;
			if(l/B == r/B){
				cout << get(l, r) << endl;
				continue;
			}
			ans = min(ans, get(l, L-1));
			ans = min(ans, get(R, r));
			for(int i = L/B; i < R/B; i++){
				llint pos = lower_bound(dif+i*B, dif+(i+1)*B, -add[i]) - dif;
				if(pos < n && pos/B == i) ans = min(ans, Amin[pos]+add[i]);
				if(pos > 0 && (pos-1)/B == i) ans = min(ans, Bmin[pos-1]);
			}
			cout << ans << endl;
		}
	}
	
	return 0;
}
