#include <bits/stdc++.h>
using namespace std;
template <class T>
void print(vector<T> v) {
  cerr << "[";
  if (v.size()) cerr << v[0];
  for (int i = (1); i < (v.size()); ++i) cerr << ", " << v[i];
  cerr << "]\n";
}
template <class T>
string i2s(T x) {
  ostringstream o;
  o << x;
  return o.str();
}
vector<string> splt(string s, char c = ' ') {
  vector<string> all;
  int p = 0, np;
  while (np = s.find(c, p), np >= 0) {
    if (np != p) all.push_back(s.substr(p, np - p));
    p = np + 1;
  }
  if (p < s.size()) all.push_back(s.substr(p));
  return all;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<double> p(n + 1, 0);
  p[0] = 1.0;
  for (int j = (0); j < (n - 1); ++j) {
    for (int i = p.size() - 2; i >= 0; i--) {
      double z = 1.0 * (m - 1 - i) / (n * m - j - 1);
      p[i + 1] += z * p[i];
      p[i] *= (1.0 - z);
    }
  }
  double rv = 0;
  for (int i = (0); i < (n); ++i) rv += p[i] * (i + 1) / n;
  cout << rv << endl;
  return 0;
}
