#include <bits/stdc++.h>
using namespace std;
template <class _T>
_T MAX(_T a, _T b) {
  return a > b ? a : b;
}
template <class _T>
_T MIN(_T a, _T b) {
  return a < b ? a : b;
}
template <class _T>
_T GCD(_T a, _T b) {
  return b ? GCD(b, a % b) : a;
}
const int maxn = 1 << 19;
long long int T[maxn << 1];
int n, q, ss, ee;
void init(int Node, int i, int j) {
  if (i == j) {
    T[Node] = 1;
    return;
  }
  int Node2 = Node << 1;
  int m = (i + j) / 2;
  init(Node2, i, m);
  init(Node2 + 1, m + 1, j);
  T[Node] = T[Node2] + T[Node2 + 1];
}
void update(int Node, int i, int j, int index, int val) {
  if (i == j && i == index) {
    T[Node] += val;
    return;
  }
  int Node2 = Node << 1;
  int m = (i + j) / 2;
  if (index <= m)
    update(Node2, i, m, index, val);
  else
    update(Node2 + 1, m + 1, j, index, val);
  T[Node] = T[Node2] + T[Node2 + 1];
}
long long int findsum(int Node, int L, int R, int i, int j) {
  if (i > R || j < L) return 0;
  if (L == i && R == j) return T[Node];
  int m = (L + R) >> 1;
  if (j <= m) {
    return findsum(Node << 1, L, m, i, j);
  }
  if (i > m) {
    return findsum((Node << 1) + 1, m + 1, R, i, j);
  }
  return findsum(Node << 1, L, m, i, m) +
         findsum((Node << 1) + 1, m + 1, R, m + 1, j);
}
void fold(int p) {
  int len = abs(ss - ee) + 1;
  if (ss < ee) {
    if (p > (len >> 1)) {
      p = (len - p);
      int v = ee - p;
      int j = ee - p;
      for (int i = (ee - p + 1); i <= ee; i++) {
        update(1, 0, n - 1, j, findsum(1, 0, n - 1, i, i));
        j--;
      }
      ee = ee - p;
      swap(ss, ee);
    } else {
      int v = ss + p;
      int j = (ss + p);
      for (int i = (ss + p - 1); i >= ss; i--) {
        update(1, 0, n - 1, j, findsum(1, 0, n - 1, i, i));
        j++;
      }
      ss = ss + p;
    }
  } else {
    if (p > (len >> 1)) {
      p = (len - p);
      int v = ee + p;
      int j = (ee + p);
      for (int i = (ee + p - 1); i >= ee; i--) {
        update(1, 0, n - 1, j, findsum(1, 0, n - 1, i, i));
        j++;
      }
      ee = ee + p;
      swap(ss, ee);
    } else {
      int v = ss - p;
      int j = ss - p;
      for (int i = (ss - p + 1); i <= ss; i++) {
        update(1, 0, n - 1, j, findsum(1, 0, n - 1, i, i));
        j--;
      }
      ss = ss - p;
    }
  }
}
long long int getwidth(int l, int r) {
  if (ss < ee) {
    return findsum(1, 0, n - 1, ss + l, ss + r - 1);
  } else {
    return findsum(1, 0, n - 1, ss - r + 1, ss - l);
  }
}
void dump() {
  printf("ss=%d ee=%d\n", ss, ee);
  for (int i = 0; i < n; i++) {
    printf("width[%d]=%d\n", i, findsum(1, 0, n - 1, i, i));
  }
}
int main(void) {
  int t;
  scanf("%d %d", &n, &q);
  init(1, 0, n - 1);
  ss = 0;
  ee = n - 1;
  for (int i = 0; i < q; i++) {
    scanf("%d", &t);
    if (t == 1) {
      int p;
      scanf("%d", &p);
      fold(p);
    } else {
      int l, r;
      scanf("%d %d", &l, &r);
      cout << getwidth(l, r) << endl;
    }
  }
  return 0;
}
