#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const long long N = 1e5 + 5;
const long long inf = 0x3f3f3f3f3f3f3f3f;
inline long long gcd(long long x, long long y) {
  if (x % y == 0) return y;
  return gcd(y, x % y);
}
inline long long ksm(long long x, long long y, long long z) {
  long long ret = 1;
  while (y) {
    if (y & 1) ret = (ret * x) % z;
    x = (x * x) % z;
    y >>= 1;
  }
  return ret;
}
long long n, p, l, r, ans;
long long prim[N], inc[N], inv[N], cnt, phi;
long long cntinc[N][50];
long long C(long long a, long long b) {
  if (b < 0 || a < b || n <= 0) {
    return 0;
  }
  if (b == 0) {
    return 1;
  }
  long long ret = inc[a] * inv[b] % p * inv[a - b] % p;
  for (long long i = 1; i <= cnt; i++)
    ret = (ret *
           ksm(prim[i], cntinc[a][i] - cntinc[b][i] - cntinc[a - b][i], p)) %
          p;
  return ret;
}
void init() {
  long long tmp = p;
  phi = p;
  for (long long i = 2; i <= sqrt(tmp); i++) {
    if (tmp % i != 0) continue;
    phi = phi / i * (i - 1);
    while (tmp % i == 0) tmp /= i;
  }
  if (tmp > 1) phi = phi / tmp * (tmp - 1);
  inc[0] = inc[1] = 1;
  inv[0] = inv[1] = 1;
  tmp = p;
  for (long long i = 2; i <= sqrt(tmp); i++) {
    if (tmp % i != 0) continue;
    prim[++cnt] = i;
    while (tmp % i == 0) tmp /= i;
  }
  if (tmp > 1) prim[++cnt] = tmp;
  for (long long i = 2; i <= n; i++) {
    tmp = i;
    for (long long j = 1; j <= cnt; j++) {
      cntinc[i][j] = cntinc[i - 1][j];
      while (tmp % prim[j] == 0) tmp /= prim[j], cntinc[i][j]++;
    }
    inc[i] = inc[i - 1] * tmp % p;
    inv[i] = ksm(inc[i], phi - 1, p);
  }
}
signed main() {
  n = read();
  p = read();
  l = read();
  r = read();
  init();
  r = min(n, r);
  for (long long i = 0; i <= n - l; i++) {
    long long tmp;
    tmp = (C(n - i, (n - i - l) >> 1) - C(n - i, (n - i - r - 1) >> 1) + p) % p;
    ans += (tmp * C(n, i)) % p;
    ans %= p;
  }
  cout << (ans + p) % p << endl;
}
