#include <bits/stdc++.h>
using namespace std;
string itoa(int i) {
  stringstream ss;
  ss << i;
  return ss.str();
}
double bag[2][1001][1001];
double get(int order, int w, int b) {
  if (bag[order][w][b] >= 0 - 1e-8) return bag[order][w][b];
  switch (order) {
    case 0:
      if (w == 0) return bag[order][w][b] = 0;
      if (w > 0 && b == 0) return bag[order][w][b] = 1.0;
      return bag[order][w][b] = (double)w / (w + b) +
                                (double)b / (w + b) * (1.0 - get(1, w, b - 1));
    case 1:
      if (w > 0 && b == 0) return bag[order][w][b] = 1.0;
      if (w == 0 && b == 0) return bag[order][w][b] = 1.0;
      if (w == 0 && b > 0) return bag[order][w][b] = 1.0;
      double res = 0;
      bool check = false;
      if (w + b - 1 > 0 && w > 0) {
        res = ((double)w / (w + b - 1) * (1.0 - get(0, w - 1, b - 1)));
        check = true;
      }
      if (w + b - 1 > 0 && b - 1 > 0) {
        res += ((double)(b - 1) / (w + b - 1) * (1.0 - get(0, w, b - 2)));
        check = true;
      }
      if (!check) res = 1.0;
      return bag[order][w][b] = (double)w / (w + b) + (double)b / (w + b) * res;
  }
}
int main() {
  int w, b;
  cin >> w >> b;
  for (int i = (0); i < (2); ++i) {
    for (int j = (0); j <= (w); ++j) {
      for (int k = (0); k <= (b); ++k) {
        bag[i][j][k] = -1.0;
      }
    }
  }
  cout << fixed;
  cout.precision(10);
  cout << get(0, w, b) << endl;
  return 0;
}
