#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int read() {
  int x = 0, f = 1, c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x * f;
}
struct Segment_Tree {
  struct Node {
    int L, R, same;
    long long tag, sum;
    inline int len() { return R - L + 1; }
  } tree[N << 2];
  void build(int L, int R, int k = 1) {
    tree[k] = (Node){L, R, -1, 0, 0};
    if (L == R) {
      tree[k].same = L;
      return;
    }
    int mid = L + R >> 1;
    build(L, mid, (k << 1));
    build(mid + 1, R, (k << 1 | 1));
  }
  inline void push_up(int k) {
    tree[k].sum = tree[(k << 1)].sum + tree[(k << 1 | 1)].sum;
    if (tree[(k << 1)].same != tree[(k << 1 | 1)].same)
      tree[k].same = -1;
    else
      tree[k].same = tree[(k << 1)].same;
  }
  void update(int k, long long val, int col) {
    tree[k].tag += val;
    tree[k].sum += 1ll * tree[k].len() * val;
    tree[k].same = col;
  }
  void push_down(int k) {
    if (!tree[k].tag) return;
    update((k << 1), tree[k].tag, tree[k].same);
    update((k << 1 | 1), tree[k].tag, tree[k].same);
    tree[k].tag = 0;
  }
  void modify(int L, int R, int val, int k = 1) {
    if (tree[k].L == L && tree[k].R == R && ~tree[k].same) {
      update(k, abs(val - tree[k].same), val);
      return;
    }
    int mid = tree[k].L + tree[k].R >> 1;
    push_down(k);
    if (R <= mid)
      modify(L, R, val, (k << 1));
    else if (L > mid)
      modify(L, R, val, (k << 1 | 1));
    else {
      modify(L, mid, val, (k << 1));
      modify(mid + 1, R, val, (k << 1 | 1));
    }
    push_up(k);
  }
  long long query(int L, int R, int k = 1) {
    if (tree[k].L == L && tree[k].R == R) return tree[k].sum;
    int mid = tree[k].L + tree[k].R >> 1;
    push_down(k);
    if (R <= mid) return query(L, R, (k << 1));
    if (L > mid) return query(L, R, (k << 1 | 1));
    return query(L, mid, (k << 1)) + query(mid + 1, R, (k << 1 | 1));
  }
} T;
int main() {
  int n, m, ope, L, R, val;
  n = read();
  m = read();
  T.build(1, n);
  while (m--) {
    ope = read();
    L = read();
    R = read();
    if (ope == 1) {
      val = read();
      T.modify(L, R, val);
    } else
      printf("%I64d\n", T.query(L, R));
  }
}
