#include <bits/stdc++.h>
long long int min(long long int x, long long int y) {
  if (x >= y) return y;
  return x;
}
int main() {
  long long int x, y, l, r, i, j, lmax = 0, d, t[10000], h = 0, a, b, aux, px,
                                  py;
  float f1, f2;
  scanf("%I64d %I64d %I64d %I64d\n", &x, &y, &l, &r);
  px = 1;
  for (i = 0; i <= 60; i++) {
    py = 1;
    if (px <= 1e18 / x && i) {
      px *= x;
    }
    for (j = 0; j <= 60; j++) {
      if (py <= 1e18 / y && j) py *= y;
      if (px + py >= l && px + py <= r) {
        t[h] = px + py;
        h++;
      }
    }
  }
  if (l == r && l == t[0]) {
    printf("0");
    return 0;
  }
  if (l == r && l != t[0]) {
    printf("1");
    return 0;
  }
  if (h == 0 && l != t[0] && r != t[0]) {
    printf("%I64d ", r - l + 1);
    return 0;
  }
  for (j = 0; j < h; j++) {
    for (i = 0; i < h - 1; i++) {
      if (t[i] >= t[i + 1]) {
        aux = t[i];
        t[i] = t[i + 1];
        t[i + 1] = aux;
      }
    }
  }
  for (i = 1; i < h; i++) {
    if (t[i] - t[i - 1] - 1 >= lmax) lmax = t[i] - t[i - 1] - 1;
  }
  if (t[0] - l >= lmax) lmax = t[0] - l;
  if (r - t[h - 1] >= lmax) lmax = r - t[h - 1];
  printf("%I64d ", lmax);
}
