#include <bits/stdc++.h>
using namespace std;
const int MAX_SIZE = 300005;
struct BIT {
  int tree[MAX_SIZE];
  int L, R;
  int ivt = 0;
  int n;
  int shift(int x) { return x & (-x); }
  void update(int pos, int val) {
    if (pos <= 0) return;
    while (pos <= n) {
      tree[pos] += val;
      pos += shift(pos);
    }
  }
  int query(int pos) {
    int ret = 0;
    while (pos > 0) {
      ret += tree[pos];
      pos -= shift(pos);
    }
    return ret;
  }
  int getlen(int l, int r) {
    if (!ivt) {
      l = l + L - 1, r = r + L - 1;
      return query(r) - query(l - 1);
    }
    auto l1 = R - r + 1, r1 = R - l + 1;
    return query(r1) - query(l1 - 1);
  }
  void fold(int len) {
    vector<int> ret;
    int i, j;
    if (2 * len <= R - L + 1) {
      if (!ivt) {
        for (i = L; i <= len + L - 1; ++i)
          ret.push_back(query(i) - query(i - 1));
        for (i = L; i <= len + L - 1; ++i) update(i, -ret[i - L]);
        for (i = len + L, j = (int)ret.size() - 1; i <= 2 * len + L - 1;
             ++i, --j)
          update(i, ret[j]);
        L = L + len;
      } else {
        for (i = R; i >= R - len + 1; --i)
          ret.push_back(query(i) - query(i - 1));
        for (i = R, j = 0; i >= R - len + 1; --i, ++j) update(i, -ret[j]);
        for (i = R - len, j = (int)ret.size() - 1; i >= R - 2 * len + 1;
             --i, --j)
          update(i, ret[j]);
        R = R - len;
      }
    } else {
      len = R - L + 1 - len;
      if (!ivt) {
        for (i = R; i >= R - len + 1; --i)
          ret.push_back(query(i) - query(i - 1));
        for (i = R, j = 0; i >= R - len + 1; --i, ++j) update(i, -ret[j]);
        for (i = R - len, j = (int)ret.size() - 1; i >= R - 2 * len + 1;
             --i, --j)
          update(i, ret[j]);
        R = R - len;
      } else {
        for (i = L; i <= len + L - 1; ++i)
          ret.push_back(query(i) - query(i - 1));
        for (i = L; i <= len + L - 1; ++i) update(i, -ret[i - L]);
        for (i = len + L, j = (int)ret.size() - 1; i <= 2 * len + L - 1;
             ++i, --j)
          update(i, ret[j]);
        L = L + len;
      }
      ivt ^= 1;
    }
  }
};
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  BIT p;
  int q;
  cin >> p.n >> q;
  for (int i = 1; i <= p.n; ++i) p.update(i, 1);
  p.L = 1, p.R = p.n;
  while (q--) {
    int tp;
    cin >> tp;
    if (tp == 1) {
      int v;
      cin >> v;
      p.fold(v);
    } else {
      int left, right;
      cin >> left >> right;
      cout << p.getlen(left + 1, right) << '\n';
    }
  }
}
