#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
long long sum[N << 2], col[N << 2], add[N << 2];
void build(int l, int r, int rt) {
  if (l == r) {
    col[rt] = l;
    return;
  }
  int m = (l + r) >> 1;
  build(l, m, rt << 1);
  build(m + 1, r, rt << 1 | 1);
}
void pushdown(int rt, int len) {
  if (col[rt]) {
    sum[rt << 1] += add[rt] * (len - (len >> 1));
    sum[rt << 1 | 1] += add[rt] * (len >> 1);
    add[rt << 1] += add[rt];
    add[rt << 1 | 1] += add[rt];
    add[rt] = 0;
    col[rt << 1] = col[rt << 1 | 1] = col[rt];
  }
}
void pushup(int rt) {
  if (col[rt << 1] == col[rt << 1 | 1])
    col[rt] = col[rt << 1];
  else
    col[rt] = 0;
  sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
}
void update(int L, int R, int c, int l, int r, int rt) {
  if (L <= l && r <= R) {
    if (col[rt]) {
      add[rt] += abs(c - col[rt]);
      sum[rt] += abs(c - col[rt]) * (r - l + 1);
      col[rt] = c;
      return;
    }
  }
  pushdown(rt, r - l + 1);
  int m = (l + r) >> 1;
  if (L <= m) update(L, R, c, l, m, rt << 1);
  if (R > m) update(L, R, c, m + 1, r, rt << 1 | 1);
  pushup(rt);
}
long long query(int L, int R, int l, int r, int rt) {
  long long ans = 0;
  if (L <= l && r <= R) {
    return sum[rt];
  }
  pushdown(rt, r - l + 1);
  int m = (l + r) >> 1;
  if (L <= m) ans += query(L, R, l, m, rt << 1);
  if (R > m) ans += query(L, R, m + 1, r, rt << 1 | 1);
  return ans;
}
int main() {
  int n, m;
  cin >> n >> m;
  build(1, n, 1);
  for (int i = 1; i <= m; i++) {
    int op;
    scanf("%d", &op);
    if (op == 1) {
      int l, r, x;
      scanf("%d%d%d", &l, &r, &x);
      update(l, r, x, 1, n, 1);
    } else {
      int l, r;
      scanf("%d%d", &l, &r);
      cout << query(l, r, 1, n, 1) << endl;
    }
  }
}
