#include <algorithm>
#include <iostream>
using namespace std;
const int N = 300000;
const int N_ = 1 << 19;
const int INF = 999999999 + N;
long long stx0[N_ << 1]; int sta0[N_ << 1], stb0[N_ << 1], stc0[N_ << 1];
long long stx1[N_ << 1]; int sta1[N_ << 1], stb1[N_ << 1], stc1[N_ << 1];
int n_;
void calc(long long xl, int al, int bl, int cl,
long long xr, int ar, int br, int cr,
long long &x, int &a, int &b, int &c) {
x = xl + xr + max(al - cr, 0);
a = ar + min(max(al, br), cr) - br;
b = al + cl - bl >= br ? bl + max(br - al, 0) : INF;
c = al + cl - bl >= cr ? bl + max(cr - al, 0) : cl;
}
void pul(int i) {
int l = i << 1, r = l ^ 1;
calc(stx0[l], sta0[l], stb0[l], stc0[l],
stx0[r], sta0[r], stb0[r], stc0[r],
stx0[i], sta0[i], stb0[i], stc0[i]);
calc(stx1[r], sta1[r], stb1[r], stc1[r],
stx1[l], sta1[l], stb1[l], stc1[l],
stx1[i], sta1[i], stb1[i], stc1[i]);
}
void build(int n) {
for (n_ = 1; n_ < n; n_ <<= 1)
;
for (int i = 0; i < n; i++) {
int s, t; cin >> s >> t;
stx0[i + n_] = stx1[i + n_] = 0;
sta0[i + n_] = stb0[i + n_] = s + n_ - i;
sta1[i + n_] = stb1[i + n_] = s + i + 1;
stc0[i + n_] = t + n_ - (i + 1);
stc1[i + n_] = t + i;
}
for (int i = n_ - 1; i; i--)
pul(i);
}
void update(int i, int s, int t) {
stx0[i + n_] = stx1[i + n_] = 0;
sta0[i + n_] = stb0[i + n_] = s + n_ - i;
sta1[i + n_] = stb1[i + n_] = s + i + 1;
stc0[i + n_] = t + n_ - (i + 1);
stc1[i + n_] = t + i;
for (i += n_; i >>= 1; )
pul(i);
}
void query0(int l, int r, long long &x, int &a, int &b, int &c) {
int l_ = l += n_, r_ = r += n_;
long long xl = 0; int al = 0, bl = 0, cl = INF;
for ( ; l <= r; l >>= 1, r >>= 1) {
if (l & 1) {
long long x_; int a_, b_, c_;
calc(xl, al, bl, cl,
stx0[l], sta0[l], stb0[l], stc0[l],
x_, a_, b_, c_);
xl = x_, al = a_, bl = b_, cl = c_, l++;
}
if (!(r & 1))
r--;
}
long long xr = 0; int ar = 0, br = 0, cr = INF;
for (l = l_, r = r_; l <= r; l >>= 1, r >>= 1) {
if (l & 1)
l++;
if (!(r & 1)) {
long long x_; int a_, b_, c_;
calc(stx0[r], sta0[r], stb0[r], stc0[r],
xr, ar, br, cr,
x_, a_, b_, c_);
xr = x_, ar = a_, br = b_, cr = c_, r--;
}
}
calc(xl, al, bl, cl, xr, ar, br, cr, x, a, b, c);
}
void query1(int l, int r, long long &x, int &a, int &b, int &c) {
int l_ = l += n_, r_ = r += n_;
long long xl = 0; int al = 0, bl = 0, cl = INF;
for ( ; l <= r; l >>= 1, r >>= 1) {
if (l & 1) {
long long x_; int a_, b_, c_;
calc(stx1[l], sta1[l], stb1[l], stc1[l],
xl, al, bl, cl,
x_, a_, b_, c_);
xl = x_, al = a_, bl = b_, cl = c_, l++;
}
if (!(r & 1))
r--;
}
long long xr = 0; int ar = 0, br = 0, cr = INF;
for (l = l_, r = r_; l <= r; l >>= 1, r >>= 1) {
if (l & 1)
l++;
if (!(r & 1)) {
long long x_; int a_, b_, c_;
calc(xr, ar, br, cr,
stx1[r], sta1[r], stb1[r], stc1[r],
x_, a_, b_, c_);
xr = x_, ar = a_, br = b_, cr = c_, r--;
}
}
calc(xr, ar, br, cr, xl, al, bl, cl, x, a, b, c);
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(NULL);
int n, q; cin >> n >> q;
build(n - 1);
while (q--) {
int t; cin >> t;
if (t == 1) {
int i, s, t; cin >> i >> s >> t, i--;
update(i, s, t);
} else {
int i, s, j, t; cin >> i >> s >> j >> t, i--, j--;
if (i == j) {
cout << max(s - t, 0) << '\n';
continue;
}
long long x; int a, b, c;
if (i < j) {
query0(i, j - 1, x, a, b, c);
s += n_ - i, t += n_ - j;
long long x_ = x + max(s - c, 0);
int a_ = a + min(max(s, b), c) - b;
cout << x_ + max(a_ - t, 0) << '\n';
} else {
swap(i, j), swap(s, t);
query1(i, j - 1, x, a, b, c);
s += i, t += j;
long long x_ = x + max(t - c, 0);
int a_ = a + min(max(t, b), c) - b;
cout << x_ + max(a_ - s, 0) << '\n';
}
}
}
return 0;
}