#include <bits/stdc++.h>
inline unsigned int getuint() {
  char w = getchar();
  while (w < '0' || '9' < w) w = getchar();
  unsigned int ans = 0;
  for (; '0' <= w && w <= '9'; w = getchar()) ans = ans * 10 + w - '0';
  return ans;
}
double dp[1005][1005];
double DP(int n, int m) {
  static int flag[1005][1005];
  if (n < 0) n = 0;
  if (m < 0) m = 0;
  if (flag[n][m]) return dp[n][m];
  flag[n][m] = 1;
  if (!n) return dp[n][m] = 0;
  if (!m) return dp[n][m] = 1;
  double ans = 1.0 * n / (n + m), t = 1.0 * m / (n + m);
  m--, t *= 1.0 * m / (n + m), m--;
  if (t > 1e-13)
    ans += t * (DP(n - 1, m) * (1.0 * n / (n + m)) +
                DP(n, m - 1) * (1.0 * m / (n + m)));
  return dp[n][m + 2] = ans;
}
int main() {
  int n = getuint(), m = getuint();
  printf("%.12f\n", DP(n, m));
  return 0;
}
