long long inverce(long long a, long long m) { long long x=0,y=0; long long g=gcdex(a,m,x,y); if (g!=1) return 0; return x; }
int gcdex(int a, int b, int *x, int *y) { if (a == 0) { *x = 0; *y = 1; return b; } int x1, y1; int d = gcdex(b%a, a, &x1, &y1); *x = y1 - (b / a) * x1; *y = x1; return d; }
long long gcdex (long long a, long long b, long long & x, long long & y) { if (a == 0) { x = 0; y = 1; return b; } long long x1, y1; long long d = gcdex (b%a, a, x1, y1); x = y1 - (b / a) * x1; y = x1; return d; }
long gcd(long k, long * m , long * w) {//ci¹g m ma byc malej¹cy long **x= new long *[k]; for(long i=0;i<k;i++) { x[i]=new long[k]; for(long j=0;j<k;j++) x[i][j]=0; x[i][i]=1; } long id=gcdex(k,m,x,0,k-1,k); for(long i=0;i<k;i++) w[i]=x[id][i]; return m[id]; }
long gcdex(long k, long * m, long **x, long i,long o,long n) { if(i==o) return i; long r= m[i]/m[o]; m[i]-=r*m[o]; if(m[i]) { for(long j=0;j<k;j++) x[i][j]-=r*x[o][j]; o=i; } else n--; if(++i==k)i=0; while(!m[i])if(++i==k)i=0; return gcdex( k , m , x , i , o , n ); }
int main() { freopen("inverse.in", "r", stdin); freopen("inverse.out", "w", stdout); int x, y, n, p; scanf("%d%d", &n, &p); if(n == 1) { printf("-1\n"); } else { int g = gcdex (p, n, &x, &y); if (g != 1) printf("-1\n"); else { x = (x % n + n) % n; printf("%d\n", x); } } return 0; }