import java.util.Arrays; import java.util.HashSet; import java.util.LinkedList; import java.util.Scanner; import java.util.Set; public class Main { public static long gcd(long a, long b){ return b == 0 ? a : gcd(b, a % b); } public static void main(String[] args){ Scanner sc = new Scanner(System.in); long M = sc.nextLong(); long N = sc.nextLong(); final long gcd = gcd(M, N); M /= gcd; N /= gcd; long answer = 0; if(N != 1 && M / N > 0){ answer += M / N; M = M % N; }else if(N == 1){ answer = M - 1; } //System.out.println(answer); //System.out.println(M + " " + N + " : " + answer); while(N != 1 && M > 1){ final long prev = N - M; //System.out.println(prev + " " + M + " " + N + " : " + answer); if(prev >= M){ { long tmp = N; N = M; M = tmp; answer++; answer += M / N; M = M % N; } }else{ N = M; M = prev; answer += 2; } } //System.out.println(M + " " + N + " : " + answer); System.out.println(answer + (N == 1 ? 0 : N)); } }