#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct BitTree {
  vector<T> bit;
  int N;
  BitTree(int _N) {
    N = _N;
    bit.resize(_N);
  }
  T get(int index) {
    T sum = 0;
    index = index + 1;
    while (index > 0) {
      sum += bit[index];
      index -= index & (-index);
    }
    return sum;
  }
  T get(int l, int r) { return get(r) - get(l - 1); }
  void update(int index, T val) {
    index = index + 1;
    while (index < N) {
      bit[index] += val;
      index += index & (-index);
    }
  }
};
void solve() {
  int n, q;
  cin >> n >> q;
  BitTree<long long> tree(n + 10);
  for (int i = 0; i < n; i++) tree.update(i, 1);
  int st = 0, en = n, swp = 0;
  while (q--) {
    int t;
    cin >> t;
    if (t == 1) {
      int p;
      cin >> p;
      if (p <= en - st - p) {
        if (!swp) {
          for (int i = p, j = p - 1; j >= 0; i++, j--) {
            tree.update(i + st, tree.get(j + st, j + st));
          }
          st += p;
        } else {
          for (int i = p + 1, j = p; j > 0; i++, j--) {
            tree.update(en - i, tree.get(en - j, en - j));
          }
          en -= p;
        }
      } else {
        if (!swp) {
          for (int i = p - 1, j = p; j < en - st; i--, j++) {
            tree.update(i + st, tree.get(j + st, j + st));
          }
          en = st + p;
        } else {
          for (int i = p, j = p + 1; j < en - st + 1; i--, j++) {
            tree.update(en - i, tree.get(en - j, en - j));
          }
          st += en - st - p;
        }
        swp ^= 1;
      }
    } else {
      int l, r;
      cin >> l >> r;
      if (!swp) {
        cout << tree.get(l + st, r - 1 + st) << "\n";
      } else {
        cout << tree.get(en - r, en - (l + 1)) << "\n";
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  cout << fixed << setprecision(20);
  ;
  int t = 1;
  for (int i = 1; i <= t; i++) {
    solve();
  }
}
