#include <bits/stdc++.h>
using namespace std;
long long expo(long long base, long long exponent, long long mod) {
  long long ans = 1;
  while (exponent != 0) {
    if (exponent & 1) ans = (1LL * ans * base) % mod;
    base = (1LL * base * base) % mod;
    exponent >>= 1;
  }
  return ans % mod;
}
const long long N = 1000006;
vector<long long> primes;
long long mod, f[N], inv[N], pows[N][20];
void compute() {
  long long cur = mod, phi = mod;
  for (long long i = 2; i * i <= cur; i++) {
    if (cur % i == 0) {
      primes.push_back(i);
      phi = phi / i * (i - 1);
      while (cur % i == 0) cur /= i;
    }
  }
  if (cur > 1) primes.push_back(cur), phi = phi / cur * (cur - 1);
  f[0] = 1;
  for (long long i = 1; i < N; i++) {
    cur = i;
    for (long long j = 0; j < (long long)primes.size(); j++) {
      pows[i][j] = pows[i - 1][j];
      while (cur % primes[j] == 0) pows[i][j]++, cur /= primes[j];
    }
    f[i] = f[i - 1] * cur % mod;
    inv[i - 1] = cur;
  }
  inv[N - 1] = expo(f[N - 1], phi - 1, mod);
  for (long long i = N - 2; i >= 0; i--) inv[i] = inv[i] * inv[i + 1] % mod;
}
long long C(long long n, long long r) {
  if (r < 0 or n < r) return 0;
  long long res = f[n] * inv[r] % mod * inv[n - r] % mod;
  for (long long i = 0; i < (long long)primes.size(); i++)
    res = res * expo(primes[i], pows[n][i] - pows[r][i] - pows[n - r][i], mod) %
          mod;
  return res;
}
long long n, l, r;
void solve() {
  cin >> n >> mod >> l >> r;
  long long P = mod, ans = 0;
  compute();
  for (long long i = l; i < n + 1; i++)
    ans =
        (ans + C(n, i) * (C(i, (i - l) / 2) - C(i, (i - r + 1) / 2 - 1) + P)) %
        P;
  cout << ans << '\n';
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
