#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
#include <list>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;

#define int64 long long
#define uint64 unsigned long long
#define pb push_back
#define mp make_pair
#define M_PI 3.1415926535898


struct point {
	int x, y;
	point(int x, int y) {
		this->x = x;
		this->y = y;
	}
};

double cone(double angle, double d) {
	double r = d / 2;
	double h = r * tan(angle);
	return M_PI * r * r * h / 3;
}

double volume(double angle, int d, int l) {
	return cone(angle, d + 2 * l * cos(angle)) - 
		   cone(angle, d);
}

int main() {
	int l, d;
	cin >> l >> d;
	double min = 0, max = M_PI / 2;
	while (max - min > 1e-10) {
		double angle = (min + max) / 2;
		double x = (min + angle) / 2,
			   y = (max + angle) / 2;
	
		double Vx = volume(x, d, l),
			   Vy = volume(y, d, l),
			   Vc = volume(angle, d, l);
		if (Vx > Vc) {
			max = angle;
		}
		else if (Vy > Vc) {
			min = angle;
		}
		else {
			min = x;
			max = y;
		}
	}
	cout.setf(ios::fixed);
	cout.precision(9);
	
	cout << volume((min + max) / 2, d, l) << endl;
	return 0;
}