#include <bits/stdc++.h>
const int MAXN = 200000;
using namespace std;
struct node {
  long long sum;
  int col;
  long long lazy;
};
node tr[4 * MAXN], dont;
int n, m;
void push(int l, int r, int ind) {
  tr[ind].sum += (r - l + 1) * 1ll * tr[ind].lazy;
  if (l != r) {
    tr[ind * 2 + 1].lazy += (long long)tr[ind].lazy;
    tr[ind * 2 + 2].lazy += (long long)tr[ind].lazy;
    if (tr[ind].col != -1) {
      tr[ind * 2 + 1].col = tr[ind].col;
      tr[ind * 2 + 2].col = tr[ind].col;
    }
  }
  tr[ind].lazy = 0;
}
node mrg(node l, node r) {
  node temp;
  if (l.col == -17) return r;
  if (r.col == -17) return l;
  if (l.col == r.col) {
    temp.lazy = 0ll;
    temp.sum = (long long)l.sum + r.sum;
    temp.col = l.col;
  } else {
    temp.lazy = 0ll;
    temp.sum = (long long)l.sum + r.sum;
    temp.col = -1;
  }
  return temp;
}
void build(int l, int r, int ind) {
  if (l > r) return;
  if (l == r) {
    tr[ind].lazy = 0ll;
    tr[ind].sum = 0ll;
    tr[ind].col = l;
    return;
  }
  int mid = (l + r) / 2;
  build(l, mid, ind * 2 + 1);
  build(mid + 1, r, ind * 2 + 2);
  tr[ind] = mrg(tr[ind * 2 + 1], tr[ind * 2 + 2]);
}
void update(int l, int r, int ql, int qr, int val, int ind) {
  push(l, r, ind);
  if (l > r || l > qr || r < ql) return;
  if (ql <= l && r <= qr && tr[ind].col != -1) {
    tr[ind].lazy += (long long)abs(val - tr[ind].col);
    tr[ind].col = val;
    push(l, r, ind);
    return;
  }
  int mid = (l + r) / 2;
  update(l, mid, ql, qr, val, ind * 2 + 1);
  update(mid + 1, r, ql, qr, val, ind * 2 + 2);
  tr[ind] = mrg(tr[ind * 2 + 1], tr[ind * 2 + 2]);
}
node query(int l, int r, int ql, int qr, int ind) {
  push(l, r, ind);
  if (l > r || l > qr || r < ql) return dont;
  if (ql <= l && r <= qr) return tr[ind];
  int mid = (l + r) / 2;
  return mrg(query(l, mid, ql, qr, ind * 2 + 1),
             query(mid + 1, r, ql, qr, ind * 2 + 2));
}
void mainp() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  build(0, n, 0);
  dont.sum = 0ll;
  dont.lazy = 0ll;
  dont.col = -17;
  for (int i = 0; i < m; i++) {
    int type;
    cin >> type;
    if (type == 1) {
      int l, r, x;
      cin >> l >> r >> x;
      update(0, n, l, r, x, 0);
    } else {
      int l, r;
      cin >> l >> r;
      cout << query(0, n, l, r, 0).sum << '\n';
    }
  }
}
int main() {
  mainp();
  return 0;
}
