#include <bits/stdc++.h>
using namespace std;
int i, j, k, n, m, p;
int a[33], c[100010][33];
int fac[100010], inv[100010];
int l, r, L, R, len, Ans;
inline int Pow(int x, int y) {
  int Ans = 1;
  for (; y; y >>= 1, x = 1ll * x * x % p)
    if (y & 1) Ans = 1ll * Ans * x % p;
  return Ans;
}
inline void Init() {
  int t = p;
  for (int i = 2; i * i <= t; i++)
    if (!(t % i)) {
      a[++m] = i;
      t /= i;
      while (!(t % i)) t /= i;
    }
  if (t > 1) a[++m] = t;
  int phi = p;
  for (int i = 1; i <= m; i++) phi = phi / a[i] * (a[i] - 1);
  fac[0] = inv[0] = 1;
  for (int i = 1; i < 100010; i++) {
    int x = i;
    for (int j = 1; j <= m; j++) {
      c[i][j] = c[i - 1][j];
      while (!(x % a[j])) x /= a[j], c[i][j]++;
    }
    fac[i] = 1ll * fac[i - 1] * x % p;
    inv[i] = Pow(fac[i], phi - 1);
  }
}
inline int Calc(int x, int y) {
  if (x < y || y < 0) return 0;
  if (!y) return 1;
  int Ans = 1ll * fac[x] * inv[y] % p * inv[x - y] % p;
  for (int i = 1; i <= m; i++)
    Ans = 1ll * Ans * Pow(a[i], c[x][i] - c[y][i] - c[x - y][i]) % p;
  return Ans;
}
int main() {
  scanf("%d%d%d%d", &n, &p, &l, &r);
  Init();
  for (i = 0; i <= n; i++)
    len = n - i, Ans = (Ans + 1ll *
                                  (Calc(len, (len - l >> 1)) -
                                   Calc(len, (min(r, len) + len >> 1) + 1)) *
                                  Calc(n, i)) %
                       p;
  if (Ans < 0) Ans += p;
  cout << Ans << endl;
  return 0;
}
