#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 10;
int n, p, l, r;
long long fc[N], ifc[N];
void exgcd(long long a, long long b, long long &d, long long &x, long long &y) {
  if (!b) return x = 1, y = 0, d = a, void();
  exgcd(b, a % b, d, y, x);
  y -= a / b * x;
}
long long inv(long long a, long long p) {
  long long x, y, d;
  exgcd(a, p, d, x, y);
  return d == 1 ? (x + p) % p : -1;
}
long long ksm(long long a, long long b, long long p) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = ret * a % p;
    a = a * a % p;
    b >>= 1;
  }
  return ret;
}
struct store {
  long long a[N];
  long long &operator[](int x) { return a[x]; }
};
map<int, store> mp;
long long fac(int n, int p, int pr) {
  if (!n) return 1;
  if (!mp.count(pr)) {
    mp[pr][0] = 1;
    for (int i = 1; i < N; i += 1)
      if (i % pr)
        mp[pr][i] = mp[pr][i - 1] * i % p;
      else
        mp[pr][i] = mp[pr][i - 1];
  }
  long long r = mp[pr][n];
  long long ret = fac(n / pr, p, pr);
  return r * ret % p;
}
long long calc(int n, int m, int p, int pr) {
  int cnt = 0;
  for (int i = n; i; i /= pr) cnt += i / pr;
  for (int i = m; i; i /= pr) cnt -= i / pr;
  for (int i = n - m; i; i /= pr) cnt -= i / pr;
  long long A = fac(n, p, pr);
  long long B = fac(n - m, p, pr);
  long long C = fac(m, p, pr);
  long long ret = A * inv(B, p) % p * inv(C, p) % p * ksm(pr, cnt, p) % p;
  return ret;
}
vector<pair<int, int> > ps;
long long calc(int n, int m, int p) {
  if (m > n) return 0;
  long long ret = 0;
  int u = p;
  static int flag = 0, gu = -1;
  if (!flag) {
    for (int i = 2; i * i <= u; i += 1) {
      if (u % i == 0) {
        int t = 1;
        while (u % i == 0) t = t * i, u = u / i;
        (ret += calc(n, m, t, i) * (p / t) % p * inv(p / t, t)) %= p;
        ps.push_back(make_pair(i, t));
      }
    }
    flag = true;
  } else {
    for (int i = 0; i < ps.size(); i += 1) {
      int t = ps[i].second;
      (ret += calc(n, m, t, ps[i].first) * (p / t) % p * inv(p / t, t)) %= p;
    }
  }
  if (gu != -1)
    u = gu;
  else
    gu = u;
  if (u > 1) (ret += calc(n, m, u, u) * (p / u) % p * inv(p / u, u)) %= p;
  return ret;
}
int main() {
  cin >> n >> p >> l >> r;
  long long ans = 0;
  for (int k = 0; k <= n; k += 1) {
    int L = int(ceil((n - k + l) / 2.0)),
        R = min(n - k, int(floor((n - k + r) / 2.0)));
    if (L <= R)
      (ans += calc(n, k, p) * (calc(n - k, L, p) - calc(n - k, R + 1, p))) %= p;
  }
  cout << (ans + p) % p;
  return 0;
}
