#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
namespace Comb {
struct P {
  long long x, y;
} f[22][N + 5];
long long mod, pn, p[22], p_a[22];
long long power(long long a, long long k, long long mod) {
  long long res = 1;
  for (a %= mod; k; k >>= 1, a = a * a % mod) {
    if (k & 1) res = res * a % mod;
  }
  return res;
}
void init() {
  ;
  long long t = mod;
  for (long long i = 2; i * i <= t; ++i)
    if (t % i == 0) {
      p[++pn] = i;
      for (p_a[pn] = 1; t % i == 0; t /= i) p_a[pn] *= i;
    };
  if (t > 1) {
    p[++pn] = t, p_a[pn] = t;
  }
  for (long long i = 1; i <= (pn); ++i) {
    f[i][0] = P{1, 0};
    for (long long j = 1; j <= (N); ++j) {
      f[i][j] = f[i][j - 1];
      for (t = j; t % p[i] == 0; t /= p[i]) ++f[i][j].y;
      (f[i][j].x *= t) %= p_a[i];
    }
  }
}
long long extgcd(long long a, long long b, long long &x, long long &y) {
  if (!b)
    return x = 1, y = 0, a;
  else {
    long long g = extgcd(b, a % b, y, x);
    return y -= a / b * x, g;
  }
}
long long inverse(long long a, long long mod) {
  long long x, y;
  extgcd(a, mod, x, y);
  return (x % mod + mod) % mod;
}
long long C(long long n, long long m, int i) {
  P t = f[i][n];
  t.y -= f[i][m].y + f[i][n - m].y;
  t.x = t.x * inverse(f[i][m].x, p_a[i]) % p_a[i] *
        inverse(f[i][n - m].x, p_a[i]) % p_a[i];
  return t.x * power(p[i], t.y, p_a[i]);
}
long long C(long long n, long long m) {
  if (m > n || m < 0) return 0;
  long long ans = 0;
  for (long long i = 1; i <= (pn); ++i) {
    long long t = C(n, m, i);
    ans += t * (mod / p_a[i]) % mod * inverse(mod / p_a[i], p_a[i]) % mod;
    ans %= mod;
  }
  return ans;
}
}  // namespace Comb
using Comb::C;
using Comb::mod;
long long n, ql, qr;
void solve() {
  long long ans = 0;
  for (long long x = 0; x <= (n); ++x) {
    long long t = n - x, l = ql, r = min(qr, t);
    if ((t + l) & 1) ++l;
    if ((t + r) & 1) --r;
    if (l > r) continue;
    ans +=
        (C(t, (t - l) / 2) - C(t, (t - r) / 2 - 1) + mod) % mod * C(n, x) % mod;
    ans %= mod;
  }
  cout << ans << endl;
}
int main(int argc, char *argv[]) {
  cin >> n >> mod >> ql >> qr;
  Comb::init();
  ;
  solve();
  return 0;
}
