#include <bits/stdc++.h>
using namespace std;
long long jc[100005], fac[12], vp[12], P[12], s, v[100005][12], r[100005][12];
long long n, L, R, p;
long long fpower(long long x, long long k) {
  long long ans = 1;
  while (k) {
    if (k & 1) ans = ans * x % p;
    x = x * x % p;
    k >>= 1;
  }
  if (!ans) return p;
  return ans;
}
long long c(long long x, long long y) {
  long long m[12] = {}, ans = 0;
  for (long long i = 1; i <= s; ++i) {
    long long o = v[x][i] - v[y][i] - v[x - y][i];
    if (o >= vp[i]) continue;
    long long q = fpower(fac[i], vp[i] - o);
    m[i] =
        fpower(fac[i], o) *
        (r[x][i] *
         fpower(r[y][i] * r[x - y][i] % q, q / fac[i] * (fac[i] - 1) - 1) % q) %
        P[i];
    ans += m[i] * fpower(p / P[i], P[i] / fac[i] * (fac[i] - 1)) % p;
  }
  return ans % p;
}
int main() {
  scanf("%I64d%I64d%I64d%I64d", &n, &p, &L, &R);
  jc[0] = 1;
  for (long long i = 1; i <= n; ++i) jc[i] = jc[i - 1] * i % p;
  long long t = p;
  for (long long i = 2; i * i <= t; ++i) {
    if (t % i) continue;
    fac[++s] = i;
    while (t % i == 0) vp[s]++, t /= i;
    P[s] = fpower(fac[s], vp[s]);
  }
  if (t > 1) fac[++s] = t, vp[s] = 1, P[s] = t;
  for (long long i = 1; i <= s; ++i) {
    r[0][i] = 1;
    for (long long j = 1; j <= n; ++j) {
      long long t = j, sum = 0;
      while (t % fac[i] == 0) t /= fac[i], sum++;
      v[j][i] = v[j - 1][i] + sum, r[j][i] = r[j - 1][i] * t % P[i];
    }
  }
  long long ans = 0;
  for (long long i = 0; i <= n; ++i) {
    long long o = 0;
    if (i - L >= 0) o += c(i, (i - L) / 2);
    if (i - R - 1 >= 0) o -= c(i, (i - R - 1) / 2);
    ans = (ans + c(n, i) * o) % p;
  }
  printf("%I64d\n", (p + ans % p) % p);
  return 0;
}
