#include <bits/stdc++.h>
#define REP(i, n, s) for (int i = (s); i < (n); i++)
#define PI 3.141592653589793
#define EPS 1e-15
#define SIZE 200001
using namespace std;
typedef long long int LL;
typedef long double LD;

int N;
LL K;
double s[SIZE];

// Count number of triangles whose area is less than X
// Another point comes right to others.
// i : position of the point
// X : target area size
int count(int i, double X) {
	int all = (N - i) / 2;
	int l = 0, r = all + 1;
	while(r - l > 1) {
		int m = (l + r) / 2;
		double area = (s[i] + s[m] + s[N - i - m]) / 2.0;
//		if (area > X + EPS) r = m;
		if (area > X) r = m;
		else l = m;
	}
	if (r == all + 1) return N - i - 1;
	return l * 2;
}

bool check(double X) {
	LL sum = 0;
	REP(i, N - 1, 1) {
		sum += count(i, X);
	}
	return sum * N >= 3 * K;
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N >> K;
	REP(i, N+1, 0) {
		s[i] = sin(2.0*PI*(double)i/(double)N);
	}
	double l = 0.0, r = 2.0 * PI;
	// (1/2)^50 = 8.881784197001252e-16
	REP(i, 50, 0) {
		double m = (l + r) / 2;
		if (check(m)) r = m;
		else l = m;
	}
	cout << fixed << setprecision(20) << r << endl;
	return 0;
}