#include using namespace std; // ================== MACROS ================== #define ll long long #define ull unsigned long long #define ld long double #define endl '\n' #define str string #define ld long double #define vld vector #define vi vector #define vb vector #define vstr vector #define umapii unordered_map #define vvi vector #define vll vector #define pii pair #define pll pair #define vpii vector> #define i128 __int128_t #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define pb push_back #define ff first #define ss second // ================== CONSTANTS ================== const ll INF = 1e18; // const int MOD = 1e9 + 7; // leetcode const int MOD = 998244353; // atcoder, codeforces // const int MOD = 1001113; // kattis const int N = 2e5 + 5; string v = "aeiou"; string V = "AEIOU"; // ================== MATH ================== ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; } ll lcm(ll a, ll b) { return a / gcd(a, b) * b; } ll mod_add(ll a, ll b) { return (a % MOD + b % MOD) % MOD; } ll mod_mul(ll a, ll b) { return (a % MOD * b % MOD) % MOD; } ll mod_pow(ll a, ll b) { ll res = 1; while (b) { if (b & 1) res = mod_mul(res, a); a = mod_mul(a, a); b >>= 1; } return res; } ll mod_pow(ll a, ll b, ll mod) { ll res = 1 % mod; a %= mod; while (b) { if (b & 1) res = (__int128)res * a % mod; a = (__int128)a * a % mod; b >>= 1; } return res; } // ================== SOLUTION ================== void solve() { ll n, b; cin >> n >> b; vector freq(b, 0); for (ll x = 0; x < b; x++) { ll v = mod_pow(x, n, b); freq[v]++; } ll ans = 0; for (ll a = 0; a < b; a++) { for (ll c = 0; c < b; c++) { ans += freq[a] * freq[c] * freq[(a + c) % b]; } } cout << ans << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; while (t--) { solve(); } return 0; }