#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 100000;
int n, MOD, l, r;
int egcd(int x, int y, int &a, int &b) {
  if (y == 0) {
    a = 1, b = 0;
    return x;
  }
  int g = egcd(y, x % y, b, a);
  b -= a * (x / y);
  return g;
}
int inv(int x) {
  int a, b, g = egcd(x, MOD, a, b);
  assert(g == 1);
  if (a < 0) a += MOD;
  return a;
}
vector<int> p;
typedef struct VAL {
  vector<int> a;
  int b;
  VAL() {
    a = vector<int>(((int)(p).size()), 0);
    b = 1;
  }
  VAL(int x) {
    a = vector<int>(((int)(p).size()), 0);
    for (int i = (0); i < (((int)(p).size())); ++i)
      while (x % p[i] == 0) ++a[i], x /= p[i];
    b = x;
  }
} VAL;
VAL operator*(const VAL &u, const VAL &v) {
  VAL ret;
  for (int i = (0); i < (((int)(p).size())); ++i) ret.a[i] = u.a[i] + v.a[i];
  ret.b = (long long)u.b * v.b % MOD;
  return ret;
}
VAL operator/(const VAL &u, const VAL &v) {
  VAL ret;
  for (int i = (0); i < (((int)(p).size())); ++i) ret.a[i] = u.a[i] - v.a[i];
  ret.b = (long long)u.b * inv(v.b) % MOD;
  return ret;
}
VAL fact[MAXN + 1];
void precalc() {
  {
    p.clear();
    int x = MOD;
    for (int i = 2; i * i <= x; ++i)
      if (x % i == 0) {
        p.push_back(i);
        while (x % i == 0) x /= i;
      }
    if (x != 1) p.push_back(x);
  }
  fact[0] = VAL(1);
  for (int i = (1); i <= (MAXN); ++i) fact[i] = fact[i - 1] * VAL(i);
}
int pw(int x, int n) {
  int ret = 1;
  while (true) {
    if (n & 1) ret = (long long)ret * x % MOD;
    if ((n >>= 1) == 0) return ret;
    x = (long long)x * x % MOD;
  }
}
int C(int n, int k) {
  VAL res = fact[n] / fact[k] / fact[n - k];
  int ret = res.b;
  for (int i = (0); i < (((int)(p).size())); ++i)
    ret = (long long)ret * pw(p[i], res.a[i]) % MOD;
  return ret;
}
int ways[MAXN + 1];
void run() {
  scanf("%d%d%d%d", &n, &MOD, &l, &r);
  precalc();
  for (int i = (0); i <= (n); ++i) {
    ways[i] = 0;
    int la = (l + i + 1) / 2, ra = min(i, (r + i) / 2);
    if (la > ra) continue;
    if (ra == i) ++ways[i], --ra;
    if (la > ra) continue;
    ways[i] = (ways[i] + (long long)C(i, la) + MOD - C(i, ra + 1)) % MOD;
  }
  int ret = 0;
  for (int i = (0); i <= (n); ++i)
    ret = (ret + (long long)ways[i] * C(n, i)) % MOD;
  printf("%d\n", ret);
}
int main() {
  run();
  return 0;
}
