import java.util.Scanner;

public class Main {

	private static long gcd(long m, long n) {
	    if(m < n) return gcd(n, m);
	    if(n == 0) return m;
	    return gcd(n, m % n);
	}

	private static long lcm(long m, long n) {
	    return m * n / gcd(m, n);
	}

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long A = Long.parseLong(sc.next());
    long B = Long.parseLong(sc.next());
    long C = Long.parseLong(sc.next());
    long D = Long.parseLong(sc.next());
    long ans = 0;

    long AparC = A % C == 0 ? A/C : A/C+1;
    long BparC = B/C;
    long cMinus = BparC - AparC + 1;

    long AparD = A % D == 0 ? A/D : A/D+1;
    long BparD = B/D;
    long dMinus = BparD - AparD + 1;

    long lcm = lcm(C, D);
    long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1;
    long BparLcm = B/lcm;
    long lcmMinus = BparLcm - AparLcm + 1;

    ans = B - A + 1 - (cMinus + dMinus - lcmMinus);
    System.out.println(ans);
  }
} import java.util.Scanner; Scanner java.util public class Main {

	private static long gcd(long m, long n) {
	    if(m < n) return gcd(n, m);
	    if(n == 0) return m;
	    return gcd(n, m % n);
	}

	private static long lcm(long m, long n) {
	    return m * n / gcd(m, n);
	}

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long A = Long.parseLong(sc.next());
    long B = Long.parseLong(sc.next());
    long C = Long.parseLong(sc.next());
    long D = Long.parseLong(sc.next());
    long ans = 0;

    long AparC = A % C == 0 ? A/C : A/C+1;
    long BparC = B/C;
    long cMinus = BparC - AparC + 1;

    long AparD = A % D == 0 ? A/D : A/D+1;
    long BparD = B/D;
    long dMinus = BparD - AparD + 1;

    long lcm = lcm(C, D);
    long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1;
    long BparLcm = B/lcm;
    long lcmMinus = BparLcm - AparLcm + 1;

    ans = B - A + 1 - (cMinus + dMinus - lcmMinus);
    System.out.println(ans);
  }
} Main private static long gcd(long m, long n) {
	    if(m < n) return gcd(n, m);
	    if(n == 0) return m;
	    return gcd(n, m % n);
	} gcd {
	    if(m < n) return gcd(n, m);
	    if(n == 0) return m;
	    return gcd(n, m % n);
	} if(m < n) return gcd(n, m); m < n m n return gcd(n, m); gcd(n, m) gcd n m if(n == 0) return m; n == 0 n 0 return m; m return gcd(n, m % n); gcd(n, m % n) gcd n m % n m n long m m long n n private static long lcm(long m, long n) {
	    return m * n / gcd(m, n);
	} lcm {
	    return m * n / gcd(m, n);
	} return m * n / gcd(m, n); m * n / gcd(m, n) m * n m n gcd(m, n) gcd m n long m m long n n public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long A = Long.parseLong(sc.next());
    long B = Long.parseLong(sc.next());
    long C = Long.parseLong(sc.next());
    long D = Long.parseLong(sc.next());
    long ans = 0;

    long AparC = A % C == 0 ? A/C : A/C+1;
    long BparC = B/C;
    long cMinus = BparC - AparC + 1;

    long AparD = A % D == 0 ? A/D : A/D+1;
    long BparD = B/D;
    long dMinus = BparD - AparD + 1;

    long lcm = lcm(C, D);
    long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1;
    long BparLcm = B/lcm;
    long lcmMinus = BparLcm - AparLcm + 1;

    ans = B - A + 1 - (cMinus + dMinus - lcmMinus);
    System.out.println(ans);
  } main {
    Scanner sc = new Scanner(System.in);
    long A = Long.parseLong(sc.next());
    long B = Long.parseLong(sc.next());
    long C = Long.parseLong(sc.next());
    long D = Long.parseLong(sc.next());
    long ans = 0;

    long AparC = A % C == 0 ? A/C : A/C+1;
    long BparC = B/C;
    long cMinus = BparC - AparC + 1;

    long AparD = A % D == 0 ? A/D : A/D+1;
    long BparD = B/D;
    long dMinus = BparD - AparD + 1;

    long lcm = lcm(C, D);
    long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1;
    long BparLcm = B/lcm;
    long lcmMinus = BparLcm - AparLcm + 1;

    ans = B - A + 1 - (cMinus + dMinus - lcmMinus);
    System.out.println(ans);
  } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) long A = Long.parseLong(sc.next()); A Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc long B = Long.parseLong(sc.next()); B Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc long C = Long.parseLong(sc.next()); C Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc long D = Long.parseLong(sc.next()); D Long.parseLong(sc.next()) Long.parseLong Long sc.next() sc.next sc long ans = 0; ans 0 long AparC = A % C == 0 ? A/C : A/C+1; AparC A % C == 0 ? A/C : A/C+1 A % C == 0 A % C A C 0 A/C A C A/C+1 A/C A C 1 long BparC = B/C; BparC B/C B C long cMinus = BparC - AparC + 1; cMinus BparC - AparC + 1 BparC - AparC BparC AparC 1 long AparD = A % D == 0 ? A/D : A/D+1; AparD A % D == 0 ? A/D : A/D+1 A % D == 0 A % D A D 0 A/D A D A/D+1 A/D A D 1 long BparD = B/D; BparD B/D B D long dMinus = BparD - AparD + 1; dMinus BparD - AparD + 1 BparD - AparD BparD AparD 1 long lcm = lcm(C, D); lcm lcm(C, D) lcm C D long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1; AparLcm A % lcm == 0 ? A/lcm : A/lcm+1 A % lcm == 0 A % lcm A lcm 0 A/lcm A lcm A/lcm+1 A/lcm A lcm 1 long BparLcm = B/lcm; BparLcm B/lcm B lcm long lcmMinus = BparLcm - AparLcm + 1; lcmMinus BparLcm - AparLcm + 1 BparLcm - AparLcm BparLcm AparLcm 1 ans = B - A + 1 - (cMinus + dMinus - lcmMinus) ans B - A + 1 - (cMinus + dMinus - lcmMinus) B - A + 1 B - A B A 1 (cMinus + dMinus - lcmMinus) cMinus + dMinus cMinus dMinus lcmMinus System.out.println(ans) System.out.println System.out System System.out ans String[] args args public class Main {

	private static long gcd(long m, long n) {
	    if(m < n) return gcd(n, m);
	    if(n == 0) return m;
	    return gcd(n, m % n);
	}

	private static long lcm(long m, long n) {
	    return m * n / gcd(m, n);
	}

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long A = Long.parseLong(sc.next());
    long B = Long.parseLong(sc.next());
    long C = Long.parseLong(sc.next());
    long D = Long.parseLong(sc.next());
    long ans = 0;

    long AparC = A % C == 0 ? A/C : A/C+1;
    long BparC = B/C;
    long cMinus = BparC - AparC + 1;

    long AparD = A % D == 0 ? A/D : A/D+1;
    long BparD = B/D;
    long dMinus = BparD - AparD + 1;

    long lcm = lcm(C, D);
    long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1;
    long BparLcm = B/lcm;
    long lcmMinus = BparLcm - AparLcm + 1;

    ans = B - A + 1 - (cMinus + dMinus - lcmMinus);
    System.out.println(ans);
  }
} public class Main {

	private static long gcd(long m, long n) {
	    if(m < n) return gcd(n, m);
	    if(n == 0) return m;
	    return gcd(n, m % n);
	}

	private static long lcm(long m, long n) {
	    return m * n / gcd(m, n);
	}

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long A = Long.parseLong(sc.next());
    long B = Long.parseLong(sc.next());
    long C = Long.parseLong(sc.next());
    long D = Long.parseLong(sc.next());
    long ans = 0;

    long AparC = A % C == 0 ? A/C : A/C+1;
    long BparC = B/C;
    long cMinus = BparC - AparC + 1;

    long AparD = A % D == 0 ? A/D : A/D+1;
    long BparD = B/D;
    long dMinus = BparD - AparD + 1;

    long lcm = lcm(C, D);
    long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1;
    long BparLcm = B/lcm;
    long lcmMinus = BparLcm - AparLcm + 1;

    ans = B - A + 1 - (cMinus + dMinus - lcmMinus);
    System.out.println(ans);
  }
} Main
import java.util.Scanner;

public class Main {

	private static long gcd(long m, long n) {
	    if(m < n) return gcd(n, m);
	    if(n == 0) return m;
	    return gcd(n, m % n);
	}

	private static long lcm(long m, long n) {
	    return m * n / gcd(m, n);
	}

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long A = Long.parseLong(sc.next());
    long B = Long.parseLong(sc.next());
    long C = Long.parseLong(sc.next());
    long D = Long.parseLong(sc.next());
    long ans = 0;

    long AparC = A % C == 0 ? A/C : A/C+1;
    long BparC = B/C;
    long cMinus = BparC - AparC + 1;

    long AparD = A % D == 0 ? A/D : A/D+1;
    long BparD = B/D;
    long dMinus = BparD - AparD + 1;

    long lcm = lcm(C, D);
    long AparLcm = A % lcm == 0 ? A/lcm : A/lcm+1;
    long BparLcm = B/lcm;
    long lcmMinus = BparLcm - AparLcm + 1;

    ans = B - A + 1 - (cMinus + dMinus - lcmMinus);
    System.out.println(ans);
  }
}