#include <bits/stdc++.h>
using namespace std;
const long double pi = acosl(-1);
const int maxn = 100010;
const long long mod = 1e9 + 7;
const int inf = 1e9;
const long double eps = 1e-10;
int n, l, r;
long long p, fac[maxn], inv[maxn];
vector<pair<int, int> > vec;
long long phi;
long long pwr(long long x, long long P) {
  if (P == 0) return 1;
  return P & 1 ? x * pwr(x * x % p, P / 2) % p : pwr(x * x % p, P / 2);
}
void init() {
  int st = sqrt(p + 0.5);
  long long tmp = p;
  for (int i = 2; i < st + 1; i++)
    if (tmp % i == 0) {
      int cnt = 0;
      while (tmp % i == 0) tmp /= i, cnt++;
      vec.push_back({i, cnt});
    }
  if (tmp > 1) vec.push_back({tmp, 1});
  phi = p;
  for (pair<int, int> pa : vec) phi -= phi / pa.first;
  fac[0] = inv[0] = 1;
  for (int i = 1; i < maxn; i++) {
    int k = i;
    for (pair<int, int> pa : vec)
      while (k % pa.first == 0) k /= pa.first;
    fac[i] = fac[i - 1] * k % p;
    inv[i] = pwr(fac[i], phi - 1);
  }
}
long long wk(long long x, long long n) {
  long long ret = 0;
  long long tmp = x;
  while (x <= n) {
    ret += n / x;
    x *= tmp;
  }
  return ret;
}
long long cal(int n, int k) {
  if (k < 0) return 0;
  long long ret = fac[n] * inv[k] % p * inv[n - k] % p;
  for (pair<int, int> pa : vec) {
    long long num = wk(pa.first, n) - wk(pa.first, k) - wk(pa.first, n - k);
    ret = ret * pwr(pa.first, num) % p;
  }
  return ret;
}
int main() {
  scanf("%d%lld%d%d", &n, &p, &l, &r);
  long long ans = 0;
  init();
  for (int i = 0; i < n + 1; i++) {
    int N = n - i;
    int L = l, R = r;
    if ((N - L) & 1) L++;
    if ((N - R) & 1) R--;
    if (L > R) continue;
    if (N < L)
      break;
    else
      ans += cal(n, i) * (cal(N, (N - L) / 2) - cal(N, (N - R) / 2 - 1));
    ans %= p;
  }
  printf("%lld\n", ans);
}
