#include <bits/stdc++.h>
using namespace std;
const int MAX_LEVEL = 600;
int n, k;
double f[2][MAX_LEVEL + 5];
double prob[2][MAX_LEVEL + 5];
int main() {
  ios ::sync_with_stdio(false);
  cin.tie(NULL);
  cout << (fixed) << setprecision(16);
  while (cin >> n >> k) {
    memset(f, 0, sizeof f);
    memset(prob, 0, sizeof prob);
    f[0][1] = 0.0;
    prob[0][1] = 1.0;
    int row = 0;
    for (int i = (0), _b = (n - 1); i <= _b; i++) {
      memset(f[row ^ 1], 0, sizeof f[row ^ 1]);
      memset(prob[row ^ 1], 0, sizeof prob[row ^ 1]);
      for (int t = (1), _b = (MAX_LEVEL); t <= _b; t++)
        if (prob[row][t] > 1e-30) {
          double cur = prob[row][t] / (double)(t + 1) * (1 / (double)k);
          prob[row ^ 1][t + 1] += cur;
          f[row ^ 1][t + 1] += cur * (f[row][t] / prob[row][t] + t);
          cur = prob[row][t] * t / (double)(t + 1) * (1 / (double)k);
          prob[row ^ 1][t] += cur;
          f[row ^ 1][t] += cur * (f[row][t] / prob[row][t]) +
                           (cur / t) * (t * (t + 1)) / 2.0;
          cur = prob[row][t] * (k - 1) / (double)k;
          prob[row ^ 1][t] += cur;
          f[row ^ 1][t] += cur * (f[row][t] / prob[row][t]);
        }
      double sum = 0.0;
      for (int t = (1), _b = (MAX_LEVEL); t <= _b; t++) sum += prob[row ^ 1][t];
      for (int t = (1), _b = (MAX_LEVEL); t <= _b; t++) prob[row ^ 1][t] /= sum;
      row = 1 - row;
    }
    double res = 0.0;
    for (int t = (1), _b = (MAX_LEVEL); t <= _b; t++) res += f[row][t];
    cout << res * k << endl;
  }
  return 0;
}
