#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-13;
map<pair<int, int>, double> memo;
double solve(int W, int B) {
  if (W <= 0) return 0;
  if (B <= 0) return 1;
  pair<int, int> args = make_pair(W, B);
  if (memo.find(args) != memo.end()) return memo[args];
  double ans = W * 1.0 / (W + B);
  double cont_prob = B * 1.0 / (W + B);
  B--;
  cont_prob = cont_prob * (B * 1.0) / (W + B);
  B--;
  if (cont_prob > eps) {
    double p_black = solve(W, B - 1) * (B * 1.0 / (W + B));
    double p_white = solve(W - 1, B) * (W * 1.0 / (W + B));
    ans += cont_prob * (p_black + p_white);
  }
  memo[args] = ans;
  return ans;
}
double solve2(int W, int B) {
  double dp[W + 1][B + 1];
  for (int i = 0; i < W + 1; i++) dp[i][0] = 1;
  for (int i = 0; i < B + 1; i++) dp[0][i] = 0;
  for (int i = 1; i < W + 1; i++) {
    for (int j = 1; j < B + 1; j++) {
      double ret = i * 1. / (i + j);
      double cont_prob = j * 1. / (i + j);
      cont_prob = cont_prob * ((j - 1) * 1.) / (i + j - 1.);
      if (cont_prob > eps) {
        double p_black = dp[i][j - 3] * (j - 2.) / (i + j - 2.);
        double p_white = dp[i - 1][j - 2] * (i * 1.) / (i + j - 2.);
        ret += cont_prob * (p_black + p_white);
      }
      dp[i][j] = ret;
    }
  }
  return dp[W][B];
}
int main() {
  int W, B;
  cin >> W >> B;
  double ans = solve2(W, B);
  printf("%.9lf\n", ans);
}
