#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  bool f = 0;
  char c = getchar();
  for (; !isdigit(c); c = getchar()) f ^= !(c - 45);
  for (; isdigit(c); c = getchar()) x = x * 10 + c - 48;
  if (f) x = -x;
  return x;
}
long long md, b[200005], phi, pr[200005], n, p, l, r, cnt, va[200005];
long long jc[200005], jcp[200005][11], zyz[200005], cpt, ny[200005];
inline void euler(long long n) {
  for (long long i = 2; i <= n; i++) {
    if (!b[i]) pr[++cnt] = i;
    for (long long j = 1; j <= cnt && i * pr[j] <= n; j++) {
      b[i * pr[j]] = 1;
      if (i % pr[j] == 0) {
        break;
      }
    }
  }
}
long long ksm(long long a) {
  long long b = phi - 1, res = 1;
  while (b) {
    if (b & 1) res = res * a % md;
    b >>= 1;
    a = a * a % md;
  }
  return res;
}
long long po(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % md;
    b >>= 1;
    a = a * a % md;
  }
  return res;
}
void init() {
  jc[1] = jc[0] = 1;
  for (long long i = 2; i <= 200000; i++) {
    long long pc = i;
    for (long long j = 1; j <= cpt; j++) {
      jcp[i][j] = jcp[i - 1][j];
      while (pc % zyz[j] == 0) {
        jcp[i][j]++;
        pc /= zyz[j];
      }
    }
    jc[i] = jc[i - 1] * pc % md;
  }
  ny[0] = 1;
  for (long long i = 1; i <= 200000; i++) {
    ny[i] = ksm(jc[i]);
  }
}
long long c(long long m, long long n) {
  if (n < 0 || m < 0 || n > m) return 0;
  long long res = jc[m] * ny[n] % md * ny[m - n] % md;
  for (long long i = 1; i <= cpt; i++) {
    res = res * po(zyz[i], (jcp[m][i] - jcp[n][i] - jcp[m - n][i])) % md;
  }
  return res;
}
signed main() {
  euler(200000);
  n = read(), p = read(), l = read(), r = read();
  long long pc = p;
  md = p;
  phi = p;
  for (long long i = 1; pr[i] * pr[i] <= pc; i++) {
    if (pc % pr[i] == 0) {
      phi = phi / (pr[i]) * (pr[i] - 1);
    }
    while (pc % pr[i] == 0) {
      va[pr[i]]++;
      pc /= pr[i];
    }
  }
  if (pc != 1) {
    zyz[++cpt] = pc;
    phi = phi / pc * (pc - 1);
  }
  for (long long i = 1; i <= 100000; i++) {
    if (va[i]) {
      zyz[++cpt] = i;
    }
  }
  init();
  long long ans = 0;
  for (long long i = 0; i <= n - l; i++) {
    ans = (ans + c(n, i) * (c(n - i, (n - i - l) >> 1) -
                            c(n - i, ((n - i - r - 1) >> 1)) + md)) %
          md;
  }
  cout << ans;
}
