#include <bits/stdc++.h>
using namespace std;
const int maxN = 2e5 + 10, lim = 2e5;
int n, P, l, r, phi;
int fac[maxN + 1], inv[maxN + 1];
int cnt, p[maxN + 1], c[maxN + 1][22];
inline long long ADD(long long x, long long y) {
  return x + y >= P ? x + y - P : x + y;
}
inline long long SUB(long long x, long long y) {
  return x - y < 0 ? x - y + P : x - y;
}
inline int mpow(int a, int x) {
  int ans = 1;
  while (x) {
    if (x & 1) ans = 1ll * ans * a % P;
    a = 1ll * a * a % P;
    x >>= 1;
  }
  return ans;
}
inline void getPhi() {
  int x = P;
  phi = P;
  for (int i = 2; i * i <= x; i++)
    if (x % i == 0) {
      phi = phi / i * (i - 1);
      p[++cnt] = i;
      while (x % i == 0) x /= i;
    }
  if (x > 1) p[++cnt] = x, phi = phi / x * (x - 1);
}
inline void getFac() {
  fac[0] = inv[0] = 1;
  for (int i = 1; i <= n; i++) {
    int x = i;
    for (int j = 1; j <= cnt; j++) {
      c[i][j] = c[i - 1][j];
      while (x % p[j] == 0) c[i][j]++, x /= p[j];
    }
    fac[i] = 1ll * fac[i - 1] * x % P;
    inv[i] = mpow(fac[i], phi - 1);
  }
}
inline int C(int n, int m) {
  if (n < m) return 0;
  int res = 1ll * fac[n] * inv[m] % P * inv[n - m] % P;
  for (int i = 1; i <= cnt; i++)
    res = 1ll * res * mpow(p[i], c[n][i] - c[m][i] - c[n - m][i]) % P;
  return res;
}
inline int calc(int x) {
  if (x < 0) return 0;
  int ans = 0;
  for (int y = 0; y <= n; y++) {
    int s = (y + 1) / 2, t = (x + y) / 2;
    ans = ADD(ans, 1ll * C(n, y) * SUB(C(y, s), C(y, t + 1)) % P);
  }
  return ans;
}
int main() {
  scanf("%d %d %d %d", &n, &P, &l, &r);
  getPhi();
  getFac();
  printf("%lld\n", SUB(calc(r), calc(l - 1)));
  return 0;
}
