Problem: While sailing on a boat, Inessa noticed a beautiful water lily flower above the lake's surface. She came closer and it turned out that the lily was exactly H centimeters above the water surface. Inessa grabbed the flower and sailed the distance of L centimeters. Exactly at this point the flower touched the water surface.

<image>

Suppose that the lily grows at some point A on the lake bottom, and its stem is always a straight segment with one endpoint at point A. Also suppose that initially the flower was exactly above the point A, i.e. its stem was vertical. Can you determine the depth of the lake at point A?

Input

The only line contains two integers H and L (1 ≤ H < L ≤ 10^{6}).

Output

Print a single number — the depth of the lake at point A. The absolute or relative error should not exceed 10^{-6}.

Formally, let your answer be A, and the jury's answer be B. Your answer is accepted if and only if \frac{|A - B|}{max{(1, |B|)}} ≤ 10^{-6}.

Examples

Input


1 2


Output


1.5000000000000


Input


3 5


Output


2.6666666666667

Solution (in JAVA):

Solution:
import java.util.*;
import javax.naming.directory.InvalidAttributesException;
import java.io.InputStreamReader;
import java.io.Writer;
import java.io.BufferedReader;
import java.io.IOException;
import java.lang.Math;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Set;

public class two {
 
  static boolean isPalindrome(String word) {
    word = word.toLowerCase();
    int start = 0;
    int end = word.length() - 1;
    boolean flag = true;
    while (start <= end) {
      if (word.charAt(start) != word.charAt(end)) {
        flag = false;
        break;
      } else
        start++;
      end--;
    }
    return flag;
  }
 
  static boolean isTriangle(int a,int b,int c)
  {
    boolean flag=false;
    if(a+b > c && b+c > a && c+a > b)flag=true;
    return flag;
  }
 
  static boolean isVowel(char x) {
    if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'A' || x == 'E' || x == 'I' || x == 'O'
        || x == 'U')
      return true;
    else
      return false;
  }
 
  static boolean isPrime(int n) {
 
    if (n <= 1)
      return false;
    if (n <= 3)
      return true;
 
    if (n % 2 == 0 || n % 3 == 0)
      return false;
 
    for (int i = 5; i * i <= n; i = i + 6)
      if (n % i == 0 || n % (i + 2) == 0)
        return false;
 
    return true;
  }
 
  static int nCr(int n, int r) {
    return fact(n) / (fact(r) * fact(n - r));
  }
 
  // Returns factorial of n
  static int fact(int n) {
    int res = 1;
    for (int i = 2; i <= n; i++)
      res = res * i;
    return res;
  }
 
  static boolean isPerfectSquare(double x) {
    double sr = Math.sqrt(x);
    return ((sr - Math.floor(sr)) == 0);
  }
 
  static int gcd(int a, int b) {
    if (b == 0)
      return a;
    return gcd(b, a % b);
  }
 
  static long gcd(long a, long b) {
    if (b == 0)
      return a;
    return gcd(b, a % b);
  }
 
  static long lcm(long a, long b) {
    return (a * b) / gcd(a, b);
  }

  
 
  static class FastReader {
    BufferedReader br;
    StringTokenizer st;
 
    public FastReader() {
      br = new BufferedReader(new InputStreamReader(System.in));
    }
 
    String next() {
      while (st == null || !st.hasMoreElements()) {
        try {
          st = new StringTokenizer(br.readLine());
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      return st.nextToken();
    }
 
    int nextInt() {
      return Integer.parseInt(next());
    }
 
    long nextLong() {
      return Long.parseLong(next());
    }
 
    double nextDouble() {
      return Double.parseDouble(next());
    }
 
    String nextLine() throws IOException, InvalidAttributesException {
      String str = "";
      str = br.readLine();
      return str;
    }
 
    public int[] nextIntArray(int n) {
      int[] array = new int[n];
      for (int i = 0; i < n; ++i)
        array[i] = nextInt();
      return array;
    }
 
    public long[] nextLongArray(int n) {
      long[] array = new long[n];
      for (int i = 0; i < n; ++i)
        array[i] = nextLong();
      return array;
    }
 
    public ArrayList<Integer> nextIntArrayList(int n) {
      ArrayList<Integer> ar = new ArrayList<>();
      for (int i = 0; i < n; i++)
        ar.add(nextInt());
      return ar;
    }
 
    public ArrayList<Long> nextLongArrayList(int n) {
      ArrayList<Long> ar = new ArrayList<>();
      for (int i = 0; i < n; i++)
        ar.add(nextLong());
      return ar;
    }
 
    public int[][] nextIntMatrix(int n, int m) {
      int[][] matrix = new int[n][m];
      for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
          matrix[i][j] = nextInt();
      return matrix;
    }
 
    public long[][] nextLongMatrix(int n, int m) {
      long[][] matrix = new long[n][m];
      for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
          matrix[i][j] = nextLong();
      return matrix;
    }
 
    public char[][] nextCharMatrix(int n, int m) {
      char[][] matrix = new char[n][m];
      for (int i = 0; i < n; ++i)
        matrix[i] = next().toCharArray();
      return matrix;
    }
 
  }
 
  static class OutputWriter {
    private final PrintWriter writer;
 
    public OutputWriter(OutputStream outputStream) {
      writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
    }
 
    public OutputWriter(Writer writer) {
      this.writer = new PrintWriter(writer);
    }
 
    public void print(Object... objects) {
      for (int i = 0; i < objects.length; i++) {
        if (i != 0) {
          writer.print(' ');
        }
        writer.print(objects[i]);
      }
    }
 
    public void print(int[] array) {
      for (int i = 0; i < array.length; i++) {
        if (i != 0) {
          writer.print(' ');
        }
        writer.print(array[i]);
      }
    }
 
    public void print(double[] array) {
      for (int i = 0; i < array.length; i++) {
        if (i != 0) {
          writer.print(' ');
        }
        writer.print(array[i]);
      }
    }
 
    public void print(long[] array) {
      for (int i = 0; i < array.length; i++) {
        if (i != 0) {
          writer.print(' ');
        }
        writer.print(array[i]);
      }
    }
 
    public void print(char[] array) {
      for (int i = 0; i < array.length; i++) {
        if (i != 0) {
          writer.print(' ');
        }
        writer.print(array[i]);
      }
    }
 
    public void print(String[] array) {
      for (int i = 0; i < array.length; i++) {
        if (i != 0) {
          writer.print(' ');
        }
        writer.print(array[i]);
      }
    }
 
    public void print(int[][] matrix) {
      for (int i = 0; i < matrix.length; ++i) {
        println(matrix[i]);
      }
    }
 
    public void print(double[][] matrix) {
      for (int i = 0; i < matrix.length; ++i) {
        println(matrix[i]);
      }
    }
 
    public void print(long[][] matrix) {
      for (int i = 0; i < matrix.length; ++i) {
        println(matrix[i]);
      }
    }
 
    public void print(char[][] matrix) {
      for (int i = 0; i < matrix.length; ++i) {
        println(matrix[i]);
      }
    }
 
    public void print(String[][] matrix) {
      for (int i = 0; i < matrix.length; ++i) {
        println(matrix[i]);
      }
    }
 
    public void println(int[] array) {
      print(array);
      writer.println();
    }
 
    public void println(double[] array) {
      print(array);
      writer.println();
    }
 
    public void println(long[] array) {
      print(array);
      writer.println();
    }
 
    public void println(String[] array) {
      print(array);
      writer.println();
    }
 
    public void println() {
      writer.println();
    }
 
    public void println(Object... objects) {
      print(objects);
      writer.println();
    }
 
    public void print(char i) {
      writer.print(i);
    }
 
    public void println(char i) {
      writer.println(i);
    }
 
    public void println(char[] array) {
      writer.println(array);
    }
 
    public void printf(String format, Object... objects) {
      writer.printf(format, objects);
    }
 
    public void close() {
      writer.close();
    }
 
    public void flush() {
      writer.flush();
    }
 
    public void print(long i) {
      writer.print(i);
    }
 
    public void println(long i) {
      writer.println(i);
    }
 
    public void print(int i) {
      writer.print(i);
    }
 
    public void println(int i) {
      writer.println(i);
    }
 
    public void separateLines(int[] array) {
      for (int i : array) {
        println(i);
      }
    }
  }
  static long findItems(int []arr, int n,  
  Long temp) 
{ 
int ans = 0; 
for (int i = 0; i < n; i++) 
ans += (temp / arr[i]); 
return ans; 
} 
  
  public static void main(String[] args) {
    FastReader sc = new FastReader();
    OutputStream outputStream = System.out;
    OutputWriter out = new OutputWriter(outputStream);
 
  // int t = sc.nextInt();
 
   // while (t-- > 0) {
    
    double h=sc.nextInt();
    double l = sc.nextInt();
    double a = (Math.pow(l, 2))-(Math.pow(h,2));
    //out.println("A is "+a);
    double b = a/(2*h);
    System.out.format("%.6f", b);


  // }
  
  
    
   
    
     
     
    out.flush();
    out.close();
}
 
  }