Problem: Alex enjoys performing magic tricks. He has a trick that requires a deck of n cards. He has m identical decks of n different cards each, which have been mixed together. When Alex wishes to perform the trick, he grabs n cards at random and performs the trick with those. The resulting deck looks like a normal deck, but may have duplicates of some cards.

The trick itself is performed as follows: first Alex allows you to choose a random card from the deck. You memorize the card and put it back in the deck. Then Alex shuffles the deck, and pulls out a card. If the card matches the one you memorized, the trick is successful.

You don't think Alex is a very good magician, and that he just pulls a card randomly from the deck. Determine the probability of the trick being successful if this is the case.

Input

First line of the input consists of two integers n and m (1 ≤ n, m ≤ 1000), separated by space — number of cards in each deck, and number of decks.

Output

On the only line of the output print one floating point number – probability of Alex successfully performing the trick. Relative or absolute error of your answer should not be higher than 10 - 6.

Examples

Input

2 2


Output

0.6666666666666666


Input

4 4


Output

0.4000000000000000


Input

1 2


Output

1.0000000000000000

Note

In the first sample, with probability <image> Alex will perform the trick with two cards with the same value from two different decks. In this case the trick is guaranteed to succeed.

With the remaining <image> probability he took two different cards, and the probability of pulling off the trick is <image>.

The resulting probability is <image>

Solution (in JAVA):

Solution:
import java.util.*;
import java.math.BigInteger;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class C {
    static BigInteger C(int n, int m) {
        if (n < m) {
            return BigInteger.ZERO;
        }
        BigInteger ans = BigInteger.valueOf(1);
        for (int i = 1; i <= m; i++) {
            ans = ans.multiply(BigInteger.valueOf(n - i + 1)).divide(BigInteger.valueOf(i));
        }
        return ans;
    }
    static public void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        BigDecimal suma = new BigDecimal(0.0);
        BigDecimal sumb = new BigDecimal(n);
        sumb = sumb.multiply(new BigDecimal(C(n * m, n)));
        BigDecimal cmi = new BigDecimal(1.0);
        BigDecimal cn_i = new BigDecimal(C(n * m - m, n - 1));
        for (int i = 1; i <= (n < m ? n : m); i++) {
            cmi = cmi.multiply(new BigDecimal(m - i + 1)).divide(new BigDecimal(i));
            suma = suma.add(cn_i.multiply(cmi).multiply(new BigDecimal(i * i)));
            cn_i = cn_i.multiply(new BigDecimal(n - i)).divide(new BigDecimal(n * m - m - n + i + 1));
        }
        //System.out.println("a = " + suma + "b = " + sumb);
        System.out.println(suma.divide(sumb, 15, RoundingMode.HALF_UP));
    }
}