#include <bits/stdc++.h>
using LL = long long;
struct Elem {
  int val = 0;
  std::vector<LL> cnt;
  Elem() {}
  explicit Elem(int v, const std::vector<int>& preserves)
      : cnt(preserves.size()) {
    for (int i = 0; i < preserves.size(); ++i) {
      int w = preserves[i];
      while (v % w == 0) ++cnt[i], v /= w;
    }
    val = v;
  }
};
Elem mul(Elem lhs, const Elem& rhs, int mod) {
  (lhs.cnt.size() == rhs.cnt.size());
  lhs.val = lhs.val * 1LL * rhs.val % mod;
  for (int i = 0; i < lhs.cnt.size(); ++i) {
    lhs.cnt[i] += rhs.cnt[i];
  }
  return lhs;
}
LL power(LL a, LL b, LL p) {
  LL ret = 1 % p;
  for (; b; b >>= 1, a = a * a % p)
    if (b & 1) ret = ret * a % p;
  return ret;
}
LL exgcd(LL a, LL b, LL& x, LL& y) {
  if (b == 0) return x = 1, y = 0, a;
  LL g = exgcd(b, a % b, y, x);
  y -= a / b * x;
  return g;
}
LL inv(LL a, LL p) {
  LL x, y;
  exgcd(a, p, x, y);
  return (x % p + p) % p;
}
Elem div(Elem lhs, const Elem& rhs, int mod) {
  (lhs.cnt.size() == rhs.cnt.size());
  lhs.val = lhs.val * 1LL * inv(rhs.val, mod) % mod;
  for (int i = 0; i < lhs.cnt.size(); ++i) {
    lhs.cnt[i] -= rhs.cnt[i];
  }
  return lhs;
}
struct Binom {
  int n = 0, mod = 0;
  std::vector<int> preserves;
  std::vector<Elem> factor;
  Binom(int n, int mod) : n(n), mod(mod), factor(n + 1) {
    int p = mod;
    for (int i = 2; i * i <= p; ++i)
      if (p % i == 0) {
        preserves.emplace_back(i);
        while (p % i == 0) p /= i;
      }
    if (p > 1) preserves.emplace_back(p);
    factor[0] = Elem(1, preserves);
    for (int i = 1; i <= n; ++i) {
      factor[i] = mul(factor[i - 1], Elem(i, preserves), mod);
    }
  }
  LL operator()(int a, int b) const {
    if (b < 0 || b > a) return 0;
    Elem e = div(factor[a], mul(factor[b], factor[a - b], mod), mod);
    LL ret = e.val;
    for (int i = 0; i < preserves.size(); ++i) {
      (e.cnt[i] >= 0);
      ret = ret * 1LL * power(preserves[i], e.cnt[i], mod) % mod;
    }
    return ret;
  }
};
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::istream& reader = std::cin;
  int n, p, l, r;
  reader >> n >> p >> l >> r;
  Binom binom(n, p);
  LL result = 0;
  for (int m = l; m <= n; ++m) {
    int L = std::max(m - r + 1, 0) / 2;
    int R = (m - l) / 2;
    LL val = (binom(m, R) - binom(m, L - 1) + p) % p * binom(n, m) % p;
    (result += val) %= p;
  }
  std::cout << result << std::endl;
}
