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>
using namespace std;
using Int = long long;
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}


struct Precision{
  Precision(){
    cout<<fixed<<setprecision(30);
  }
}precision_beet;

//INSERT ABOVE HERE
signed main(){
  Int n,k;
  cin>>n>>k;
  k--;
  using D = long double;
  const D PI = acos(-1.0);
  vector<D> ss(n+1);
  for(Int i=0;i<=n;i++)
    ss[i]=sin((D)i/n*PI);

  auto check=
    [&](D x)->Int{
      auto calc=[&](Int a,Int b)->D{return ss[a+b]*ss[a]*ss[b];};
      Int cnt=0;
      // seisankaku (a = b = c)
      if(n%3==0){
        Int e=n/3;
        if(calc(e,e)<=x) cnt+=e;
      }
      // nitouhen (a = b)
      for(Int a=1;a*2<n;a++){
        if(a+a+a==n) continue;
        Int b=a;
        if(calc(a,b)<=x) cnt+=n; 
      }
      // sonota (a < b, a < c, b != c)
      for(Int a=1;a*3<n;a++){
        // a < b
        Int bl=a+1;
        // a < c = n - (a + b)
        Int br=n-2*a-1;
        if(bl>br) continue;
        if(calc(a,bl)>x) continue;
        
        Int bt=(bl+br)>>1;
        // [bl, br]
        if(calc(a,bt)<=x){
          cnt+=(br-bl+1)*n;
          if((bl+br)%2==0) cnt-=n;
          continue;
        }

        // [bl, bt)
        {
          Int l=bl,r=bt;
          while(l+1<r){
            Int m=(l+r)>>1;
            if(calc(a,m)<=x) l=m;
            else r=m;
          }
          cnt+=(l-bl+1)*n;
        }
        // (bt, br]
        {
          Int l=bt,r=br;
          while(l+1<r){
            Int m=(l+r)>>1;
            if(calc(a,m)<=x) r=m;
            else l=m;
          }
          cnt+=(br-r+1)*n;
        }
      }
      return cnt>=k;
    };
  
  D L=0,R=1;
  for(Int k=0;k<50;k++){
    D M=(L+R)/2;
    if(check(M)) R=M;
    else L=M;
  }
  cout<<R*2<<endl;
  return 0;
}