Problem: Input

The input is given from Standard Input in the following format:


> $N \ K$

Output

* Please output the $K$-th triangle area.
* Print a floating number denoting the answer. The relative or absolute error of your answer should not be higher than $10^{−9}$.



Constraints

* $3 \le N \le 200,000$
* $1 \le K \le \frac{N(N-1)(N-2)}{6}$



Subtasks

Subtask 1 [ $160$ points ]


* $N \le 100$

Subtask 2 [ $240$ points ]


* $N \le 1000$

Subtask 3 [ $450$ points ]


* $N \le 200,000$

Output

* Please output the $K$-th triangle area.
* Print a floating number denoting the answer. The relative or absolute error of your answer should not be higher than $10^{−9}$.



Constraints

* $3 \le N \le 200,000$
* $1 \le K \le \frac{N(N-1)(N-2)}{6}$



Subtasks

Subtask 1 [ $160$ points ]


* $N \le 100$

Subtask 2 [ $240$ points ]


* $N \le 1000$

Subtask 3 [ $450$ points ]


* $N \le 200,000$

Input

The input is given from Standard Input in the following format:


> $N \ K$

Examples

Input

4 3


Output

1.0000000000000


Input

6 9


Output

0.86602540378


Input

12 220


Output

1.29903810568

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define all(c) c.begin(),c.end()
#define pb push_back
#define fs first
#define sc second
#define show(x) cout << #x << " = " << x << endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
using namespace std;
template<class S,class T> ostream& operator<<(ostream& o,const pair<S,T> &p){return o<<"("<<p.fs<<","<<p.sc<<")";}
template<class T> ostream& operator<<(ostream& o,const vector<T> &vc){o<<"sz = "<<vc.size()<<endl<<"[";for(const T& v:vc) o<<v<<",";o<<"]";return o;}
typedef long long ll;
ll N,K;
double theta;
double calc(int a,int b,int c){
	return (sin(a*theta)+sin(b*theta)+sin(c*theta))/2;
}
ll count(double s){
	ll ret=0;
	rep1(a,N-2){
		int lef=N-a;
		double ac=(2*s-sin(a*theta))/2.0/sin(lef*theta/2);
		int tmp=0;
		if(ac>=1){
			tmp=lef-1;
		}else if(ac<-1){

		}else{
			double t=acos(ac);
			int x=ceil(t/theta+lef/2.0);
			if(x<lef) tmp=(lef-x)*2;
		}
		ret+=tmp;
		// int ub=lef,lb=lef/2;
		// while(ub-lb>1){
		// 	int m=(ub+lb)/2;
		// 	if(calc(a,m,lef-m)<=s) ub=m;
		// 	else lb=m;
		// }
		// int cnt=(lef-ub)*2;
		// if(lef%2==0) if(calc(a,lef/2,lef/2)<=s) cnt++;
		// ret+=cnt;
	}
	return ret*2;
}
int main(){
	cin>>N>>K;
	theta=2*3.141592653589793238/N;
	K=(K-1)*6/N;
	double ub=1.3,lb=0;
	rep(tt,40){
		double m=(ub+lb)/2;
		if(count(m)>K) ub=m;
		else lb=m;
	}
	printf("%.12f\n",ub);
}