#include <bits/stdc++.h>
using namespace std;
int fac[100010], inv[100010], num[100010], mod, A[100010];
long long a[50], m[50];
int n, l, r, tot, p, P, mul;
int qpow(int a, int b) {
  int ret = 1;
  while (b) {
    if (b & 1) ret = 1ll * ret * a % mod;
    a = 1ll * a * a % mod;
    b >>= 1;
  }
  return ret;
}
long long exgcd(long long a, long long b, long long &x, long long &y) {
  long long d = a;
  if (b) {
    d = exgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else
    x = 1, y = 0;
  return d;
}
long long CRT(long long *a, long long *m, int k) {
  long long M = 1;
  long long ans = 0;
  for (int i = 1; i <= k; i++) M *= m[i];
  for (int i = 1; i <= k; i++) {
    long long x, y, Mi = M / m[i];
    exgcd(Mi, m[i], x, y);
    ans = (ans + Mi * x * a[i]) % M;
  }
  if (ans < 0) ans += M;
  return ans;
}
int C(int n, int m) {
  if (m < 0 || m > n) return 0;
  int res = num[n] - num[m] - num[n - m];
  return 1ll * fac[n] * inv[n - m] % mod * inv[m] % mod * qpow(p, res) % mod;
}
int calc() {
  fac[0] = 1;
  for (int i = 1; i <= n; i++) A[i] = i;
  for (int i = 1; i <= n; i++) {
    num[i] = num[i - 1];
    while (A[i] % p == 0) {
      num[i]++;
      A[i] /= p;
    }
    fac[i] = 1ll * fac[i - 1] * A[i] % mod;
  }
  inv[n] = qpow(fac[n], (mod > p) ? mod - mod / p - 1 : p - 2);
  for (int i = n - 1; i >= 0; i--) inv[i] = 1ll * inv[i + 1] * A[i + 1] % mod;
  int ret = 0;
  for (int i = 0; i <= n; i++) {
    ret += 1ll * C(n, i) *
           (C(n - i, (l + n - i + 1) / 2) - C(n - i, (r + n - i) / 2 + 1)) %
           mod;
    if (ret >= mod) ret -= mod;
    if (ret < 0) ret += mod;
  }
  return ret;
}
int main() {
  scanf("%d%d%d%d", &n, &P, &l, &r);
  if (p == 1) return printf("0"), 0;
  for (int i = 2; i * i <= P; i++) {
    if (P % i == 0) {
      mul = 1;
      tot++;
      while (P % i == 0) {
        P /= i;
        mul *= i;
      }
      m[tot] = mul;
      mod = mul, p = i;
      a[tot] = calc();
    }
  }
  if (P != 1) {
    tot++;
    m[tot] = P;
    mod = P, p = P;
    a[tot] = calc();
  }
  int ans = CRT(a, m, tot);
  cout << ans << endl;
}
