#include <bits/stdc++.h>
using namespace std;
int N, Q;
int type, L, R, X;
set<pair<pair<int, int>, int> > st;
struct BIT {
  long long bit[114514];
  void add(int x, long long s) {
    x++;
    while (x < 114514) bit[x] += s, x += x & -x;
  }
  long long sum(int x) {
    x++;
    long long res = 0;
    while (x > 0) res += bit[x], x -= x & -x;
    return res;
  }
} b0, b1;
long long getsum(int x) { return b0.sum(x) + b1.sum(x) * x; }
int main() {
  scanf("%d%d", &N, &Q);
  for (int(i) = 0; (i) < (N); (i)++)
    st.insert(make_pair(make_pair(i, i), i + 1));
  while (Q--) {
    scanf("%d", &type);
    if (type == 1) {
      scanf("%d%d%d", &L, &R, &X);
      L--;
      R--;
      set<pair<pair<int, int>, int> >::iterator it =
          st.lower_bound(make_pair(make_pair(L, (1 << 25)), (1 << 25)));
      it--;
      pair<pair<int, int>, int> tmp = *it;
      st.erase(it);
      if (tmp.first.first <= L - 1)
        st.insert(make_pair(make_pair(tmp.first.first, L - 1), tmp.second));
      st.insert(make_pair(make_pair(L, tmp.first.second), tmp.second));
      it = st.lower_bound(make_pair(make_pair(R, (1 << 25)), (1 << 25)));
      it--;
      tmp = *it;
      st.erase(it);
      st.insert(make_pair(make_pair(tmp.first.first, R), tmp.second));
      if (R + 1 <= tmp.first.second)
        st.insert(make_pair(make_pair(R + 1, tmp.first.second), tmp.second));
      it = st.lower_bound(make_pair(make_pair(L, -(1 << 25)), -(1 << 25)));
      while (1) {
        if (it == st.end() || it->first.first > R) break;
        int l = it->first.first, r = it->first.second, c = it->second;
        long long dif = abs(c - X);
        b0.add(l, -dif * (l - 1));
        b1.add(l, dif);
        b1.add(r + 1, -dif);
        b0.add(r + 1, dif * r);
        st.erase(it++);
      }
      st.insert(make_pair(make_pair(L, R), X));
    } else {
      scanf("%d%d", &L, &R);
      R--, L--;
      printf("%I64d\n", getsum(R) - getsum(L - 1));
    }
  }
}
