#include <iostream>
struct pair {
long x,
y;
pair(long _x, long _y): x(_x), y(_y) {}
};
pair euclid_extended(long a, long b) {
pair prev(1,0);
pair curr(0,1);
long q, r;
while(b) {
q = a / b;
r = a % b;
pair old = curr;
curr.x = prev.x - q * curr.x;
curr.y = prev.y - q * curr.y;
prev = old;
a = b;
b = r;
}
return prev;
};
int main(int argc, char *argv[]) {
//std::ifstream fin(FIN);
//std::ofstream fout(FOUT);
unsigned long a,
n;
std::cin>>a>>n;
pair sol = euclid_extended(a, n);
std::cout << ((sol.x > 0) ? (sol.x) : (n + sol.x));
return(0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IHBhaXIgewoKICAgICAgIGxvbmcgeCwgCiAgICAgICAgICAgIHk7ICAKCiAgICAgICBwYWlyKGxvbmcgX3gsIGxvbmcgX3kpOiB4KF94KSwgeShfeSkge30KfTsKCnBhaXIgZXVjbGlkX2V4dGVuZGVkKGxvbmcgYSwgbG9uZyBiKSB7CgogICAgIHBhaXIgcHJldigxLDApOyAKICAgICBwYWlyIGN1cnIoMCwxKTsKICAgICAKICAgICBsb25nIHEsIHI7CgogICAgIHdoaWxlKGIpIHsKICAgICAgCiAgICAgICBxID0gYSAvIGI7CiAgICAgICByID0gYSAlIGI7CgogICAgICAgcGFpciBvbGQgPSBjdXJyOwogCiAgICAgICBjdXJyLnggPSBwcmV2LnggLSBxICogY3Vyci54OwogICAgICAgY3Vyci55ID0gcHJldi55IC0gcSAqIGN1cnIueTsKCiAgICAgICBwcmV2ID0gb2xkOwoKICAgICAgIGEgPSBiOwogICAgICAgYiA9IHI7ICAKICAgICB9ICAgICAgIAoKICAgICByZXR1cm4gcHJldjsgCiAKfTsKCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CgogICAgLy9zdGQ6Omlmc3RyZWFtIGZpbihGSU4pOyAKICAgIC8vc3RkOjpvZnN0cmVhbSBmb3V0KEZPVVQpOyAKCiAgICB1bnNpZ25lZCBsb25nIGEsIAogICAgICAgICAgICAgICAgICBuOwoKICAgIHN0ZDo6Y2luPj5hPj5uOyAKCiAgICBwYWlyIHNvbCA9IGV1Y2xpZF9leHRlbmRlZChhLCBuKTsKCiAgICBzdGQ6OmNvdXQgPDwgKChzb2wueCA+IDApID8gKHNvbC54KSA6IChuICsgc29sLngpKTsKICAgICAKCiByZXR1cm4oMCk7Cgp9