B: P進XOR

using LL = __int128_t;

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    ll N,P;cin>>N>>P;

    ll n; // 切り捨てるブロック数
    ll len; // 切り捨てる長さ
    VI A(50);
    if(P==2){
      n = (N+1)/4; 
      len = 4*n;
    }
    else{
      n = (N+1)/P; // 切り取り
      len = P*n;
    }

    // 余った部分は具体的にXORを考える
    FOR(i,len,N+1){
      ll v = i;
      // vをP進数で表して足す
      rep(j,50){
        A[j] += v%P;
        A[j] %= P;
        v /= P;
        if(v==0) break;
      }
    }
    ll ans = 0;
    LL power=1; // overflow注意
    rep(i,50){
      ans += A[i] * power;
      power *= P;
      if(power>inf) break;
    }
    p(ans);
    
    return 0;
}