#include <bits/stdc++.h>
const int N = 100050;
using namespace std;
inline int gi() {
  char ch = getchar();
  int x = 0, q = 0;
  while (ch < '0' || ch > '9') ch == '-' ? q = 1 : 0, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return q ? (-x) : x;
}
int fap(int a, int b, int c) {
  int s = 1;
  while (b) {
    if (b & 1) s = 1ll * s * a % c;
    b >>= 1, a = 1ll * a * a % c;
  }
  return s;
}
int n, p, L, R, g[N], pk[N], f[N][50], tot, w[N][50];
long long ans;
int calc(int a, int b, int k) {
  if (a < b) return 0;
  int s = 1ll * f[a][k] * fap(f[b][k], pk[k] / g[k] * (g[k] - 1) - 1, pk[k]) %
          pk[k];
  s = 1ll * s * fap(f[a - b][k], pk[k] / g[k] * (g[k] - 1) - 1, pk[k]) % pk[k];
  s = 1ll * s * fap(g[k], w[a][k] - w[b][k] - w[a - b][k], pk[k]) % pk[k];
  return s;
}
int main() {
  cin >> n >> p >> L >> R;
  int d = sqrt(p), z = p, phi = p;
  for (int i = 2; i <= d; ++i)
    if (z % i == 0) {
      g[++tot] = i, pk[tot] = f[0][tot] = 1;
      while (z % i == 0) z /= i, pk[tot] *= i;
      phi /= i, phi *= (i - 1);
    }
  if (z > 1) ++tot, pk[tot] = g[tot] = z, f[0][tot] = 1;
  for (int i = 1; i <= n; ++i)
    for (int k = 1; k <= tot; ++k) {
      w[i][k] = w[i - 1][k];
      z = i;
      while (z % g[k] == 0) z /= g[k], ++w[i][k];
      f[i][k] = 1ll * f[i - 1][k] * z % pk[k];
    }
  for (int i = 0; i <= n; ++i) {
    if (n - i < L) continue;
    long long sum = 0;
    for (int k = 1; k <= tot; ++k) {
      int l = L + ceil((double)(n - i - L) / 2), r = R + (n - i - R) / 2;
      if (n - i < R) r = R;
      (sum += 1ll * p / pk[k] *
              fap(p / pk[k], pk[k] / g[k] * (g[k] - 1) - 1, pk[k]) % p *
              calc(n, i, k) % p *
              (calc(n - i, l, k) - calc(n - i, r + 1, k) + p) % p) %= p;
    }
    ans += sum, ans %= p;
  }
  cout << ans;
  return 0;
}
