#include <bits/stdc++.h>
using namespace std;
mt19937 rng(time(0));
uniform_int_distribution<int> uid(-1e9, 1e9);
long double d[1001][1001][2];
int u[1001][1001][2];
long double solve(int x, int y, int p) {
  if ((!x && !y) || x <= 0 || y < 0) return 0;
  if (u[x][y][p]) return d[x][y][p];
  if ((x + y) == 1 && !p)
    return d[x][y][p] = y * 1.0 / (x + y) * x * solve(x - 1, y - 1, 1 - p) +
                        y * 1.0 / (x + y) * x * solve(x, y - 2, 1 - p);
  u[x][y][p] = 1;
  return d[x][y][p] =
             (p ? x * 1.0 / (x + y) +
                      (1 - x * 1.0 / (x + y)) * solve(x, y - 1, 1 - p)
                : y * 1.0 / (x + y) * (1 - (y - 1) * 1.0 / (x + y - 1)) *
                          solve(x - 1, y - 1, 1 - p) +
                      y * 1.0 / (x + y) * (y - 1) * 1.0 / (x + y - 1) *
                          solve(x, y - 2, 1 - p));
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int x, y;
  cin >> x >> y;
  cout << setprecision(20) << fixed << solve(x, y, 1);
}
