#include <bits/stdc++.h>
using namespace std;
long long sum[4 * 100005], add[4 * 100005];
int n, m, A[100005], col[4 * 100005];
void push(int t, int l, int r);
void ad(int t, int l, int r, long long d) {
  sum[t] += 1LL * (r - l + 1) * d, add[t] += d;
}
void push(int t, int l, int r) {
  int mid = (l + r) >> 1;
  if (add[t])
    ad((t << 1), l, mid, add[t]), ad(((t << 1) + 1), mid + 1, r, add[t]),
        add[t] = 0;
  if (col[t]) col[(t << 1)] = col[((t << 1) + 1)] = col[t];
}
void update(int x) {
  sum[x] = sum[(x << 1)] + sum[((x << 1) + 1)];
  col[x] = (col[(x << 1)] == col[((x << 1) + 1)]) ? col[(x << 1)] : 0;
}
void build(int t, int l, int r) {
  int mid = (l + r) >> 1;
  if (l == r) {
    col[t] = A[l];
    return;
  }
  build((t << 1), l, mid), build(((t << 1) + 1), mid + 1, r);
  update(t);
}
void modify(int t, int l, int r, int l1, int r1, int d) {
  int mid = (l + r) >> 1;
  if (l > r1 || r < l1) return;
  if (l >= l1 && r <= r1 && col[t]) {
    ad(t, l, r, abs(col[t] - d)), col[t] = d;
    return;
  }
  push(t, l, r);
  modify((t << 1), l, mid, l1, r1, d);
  modify(((t << 1) + 1), mid + 1, r, l1, r1, d);
  update(t);
}
long long query(int t, int l, int r, int l1, int r1) {
  int mid = (l + r) >> 1;
  if (l > r1 || r < l1) return 0;
  if (l >= l1 && r <= r1) return sum[t];
  push(t, l, r);
  long long res = query((t << 1), l, mid, l1, r1) +
                  query(((t << 1) + 1), mid + 1, r, l1, r1);
  return res;
}
int main() {
  int i, num, l, r, d;
  scanf("%d %d", &n, &m);
  for (i = 1; i <= n; i++) A[i] = i, sum[i] = 0;
  build(1, 1, n);
  for (i = 1; i <= m; i++) {
    scanf("%d", &num);
    if (num == 1) {
      scanf("%d %d %d", &l, &r, &d);
      modify(1, 1, n, l, r, d);
    } else {
      scanf("%d %d", &l, &r);
      printf(
          "%I64d"
          "\n",
          query(1, 1, n, l, r));
    }
  }
  return 0;
}
