#include<iostream>
using namespace std;
int gcd(int x,int y){ //用扩展欧几里得求逆元
return y==0? x:gcd(y,x%y);
}
int exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int r=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return r;
}
int x,y;
int main()
{
int a,b;
cin>>a>>b;
exgcd(a,b,x,y);
cout<<(x%b+b)%b<<endl;//最后的x不一定是大于0小于b的最小解 用(x%b+b)%b可以转换
return 0;
}
using namespace std;
int gcd(int x,int y){ //用扩展欧几里得求逆元
return y==0? x:gcd(y,x%y);
}
int exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int r=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return r;
}
int x,y;
int main()
{
int a,b;
cin>>a>>b;
exgcd(a,b,x,y);
cout<<(x%b+b)%b<<endl;//最后的x不一定是大于0小于b的最小解 用(x%b+b)%b可以转换
return 0;
}