/*
* Problem :: 1188 / 음식 평론가
*
* Kind :: Math
*
* Insight
* - 여러가지 테스트 케이스를 만들어 보면서 규칙을 찾을려고 했다
* 편의상, 소시지가 x개, 평론가가 y명 있는 경우를 (x, y) 이라고 하자
* + (8, 6) 인 경우,
* 일단 소시지 6개는 평론가한테 1개씩 주면 (2, 6) 인 경우와 같다
* # 이때, 나머지와 재귀로 풀면 되겠다고 생각했다
* + (2, 6) 인 경우,
* 평론가는 1/3 씩 소시지를 얻어야 하는건 맞다
* 일단 있는 소시지 2개 그만큼 잘라서 2사람에게 주자
* 그렇다면 총 자른 횟수는 2 + (2, 4) 와 같게 된다
* + (2, 4) 인 경우,
* 총 자른 횟수 2 + (2, 2) 와 같게 된다
* + (2, 2) 인 경우,
* 소시지 개수와 평론가의 숫자가 같으므로 더 이상 자르지 않아도 된다
* # 이를, x %= y 해서 x == 0 이면 그만하는 것으로 처리했다
*
* Point
* - 다른 사람들은 최대공약수로 풀었더라
* 나처럼 소시지를 그때그때 적절히 배분하고 나머지는 나중에 생각할 수도 있지만
* 소시지를 붙여서 한번에 자르는 방식도 가능하더라!
* 역시 알고리즘은 짜릿해, 늘 새로워 (머리 좋은게 최고야)
*/
//
// BOJ
// ver.C++
//
// Created by GGlifer
//
// Open Source
#include <iostream>
using namespace std;
#define endl '\n'
// Set up : Global Variables
int N, M;
// Set up : Functions Declaration
int cut(int n, int m);
int main()
{
// Set up : I/O
ios::sync_with_stdio(false);
cin.tie(nullptr);
// Set up : Input
cin >> N >> M;
// Process
int ans = cut(N, M);
// Control : Output
cout << ans << endl;
}
// Helper Functions
int cut(int n, int m)
{
/* 소시지 통째로 주기 */
n %= m;
if (n == 0) return 0;
/* 소시지 그때그때 잘라서 주기 + 남은 소시지와 평론가 처리 */
return n + cut(n, m-n);
}