#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
struct node {
  int l;
  int r;
  long long co;
  long long sum;
  long long laz;
} tree[4 * N];
long long ac;
void pushup(int cur) {
  tree[cur].sum = tree[cur * 2].sum + tree[cur * 2 + 1].sum;
  if (tree[cur * 2].co == tree[cur * 2 + 1].co)
    tree[cur].co = tree[cur * 2].co;
  else
    tree[cur].co = 0;
}
void pushdown(int cur) {
  if (tree[cur].laz) {
    tree[cur * 2].sum +=
        ((long long)tree[cur].laz * (tree[cur * 2].r - tree[cur * 2].l + 1));
    tree[cur * 2].co = tree[cur].co;
    tree[cur * 2].laz += tree[cur].laz;
    tree[cur * 2 + 1].sum += ((long long)tree[cur].laz *
                              (tree[cur * 2 + 1].r - tree[cur * 2 + 1].l + 1));
    tree[cur * 2 + 1].co = tree[cur].co;
    tree[cur * 2 + 1].laz += tree[cur].laz;
    tree[cur].laz = 0;
  }
}
void build(int cur, int l, int r) {
  tree[cur].l = l;
  tree[cur].r = r;
  tree[cur].laz = 0;
  if (l == r) {
    tree[cur].co = l;
    tree[cur].sum = 0;
    return;
  }
  int mid = (l + r) / 2;
  build(cur * 2, l, mid);
  build(cur * 2 + 1, mid + 1, r);
  pushup(cur);
}
void updata(int cur, int x, int y, long long val) {
  if (x <= tree[cur].l && tree[cur].r <= y) {
    if (tree[cur].co) {
      ac = abs(tree[cur].co - val);
      tree[cur].sum += ((tree[cur].r - tree[cur].l + 1) * ac);
      tree[cur].laz += ac;
      tree[cur].co = val;
      return;
    }
  }
  pushdown(cur);
  if (x <= tree[cur * 2].r) updata(cur * 2, x, y, val);
  if (y >= tree[cur * 2 + 1].l) updata(cur * 2 + 1, x, y, val);
  pushup(cur);
}
long long query(int cur, int x, int y) {
  int l = tree[cur].l;
  int r = tree[cur].r;
  if (x <= l && r <= y) return tree[cur].sum;
  pushdown(cur);
  long long res = 0;
  if (x <= tree[cur * 2].r) res += query(cur * 2, x, y);
  if (y >= tree[cur * 2 + 1].l) res += query(cur * 2 + 1, x, y);
  return res;
}
int main() {
  int n, m;
  int op;
  int x, y;
  long long z;
  while (~scanf("%d%d", &n, &m)) {
    build(1, 1, n);
    while (m--) {
      scanf("%d", &op);
      if (op == 1) {
        scanf("%d%d%lld", &x, &y, &z);
        updata(1, x, y, z);
      } else {
        scanf("%d%d", &x, &y);
        printf("%lld\n", query(1, x, y));
      }
    }
  }
  return 0;
}
