#include <bits/stdc++.h>
using namespace std;

#define len(x)  (int((x).size()))
#define append push_back
#define pp make_pair
#define ff(a, b)    for (int a = 0; a < int(b); ++a)
#define kk(n)    ff(k, n)
#define xx(n)    ff(x, n)
#define yy(n)    ff(y, n)
#define ii(n)    ff(i, n)
#define fff(a, b, c) for (int a = int(b); a < int(c); ++a)
#define kkk(a, b) fff(k, a, b)
#define xxx(a, b) fff(x, a, b)
#define yyy(a, b) fff(y, a, b)
#define iii(a, b) fff(i, a, b)
#define bb begin()
#define ee end()
#define uu first
#define vv second
#define all(x)  (x).bb, (x).ee
#define ite(v)   decltype((v).bb)
#define fe(i, v) for(ite(v) i = (v).bb; i != (v).ee; ++i)
#define err(...)    { fprintf(stderr, __VA_ARGS__); fflush(stderr); }
#define zz(array, byte)   memset(array, byte, sizeof(array));

using LL = long long;
using DD = long double;
using pii = pair<int, int>;



const LL  INFLL  = 0x7f7f7f7f7f7f7f7fLL;
const int INFint = 0x7f7f7f7f;  //Works with memset(..).
double PI = acos(-1);
 
     

LL nbelow(double area, int N) {
    //Longest chord spans i steps along circumference.
    LL rr = 0;
    iii (1, N / 2 + 1) {
        int start = i;
        int finish = (N - i) / 2;
        if (start > finish)
            continue;
        double base = 2*sin((PI*i)/N);
        double height = 2*area/base;
        double x = height - cos((PI*i)/N);
        if (x < 1) {
            double angle = acos(x);
            double arc = PI - (PI*i)/N - angle;
            finish = min(finish, int(arc * N / (2*PI)));
        }
        if (finish < start)
            continue;
        //Don't count finish, count start only once.
        if (finish > start) {
            LL total = 2*(finish - start - 1) + 1;
            rr += total * LL(N);
        }
        if (finish == (N - i - finish)) {
            if (finish == i) {
                rr += N / 3;
            } else {
                rr += N;
            }
        } else {
            if (finish == start)
                rr += N;
            else
                rr += 2*N;
        } 
    }

    //printf("For %g we have %d\n", area, int(rr));
    return rr;
}



int main() {
    //ios_base::sync_with_stdio(false);     cin.tie(NULL);
    //cout << '\n';
    cout.precision(16);
    

    LL N, K;
    cin >> N >> K;

    double low = 0;
    double high = 10;
    while (high - low > 1e-12) {
        double mid = 0.5*(low + high);
        if (nbelow(mid, int(N)) >= K)
            high = mid;
        else
            low = mid;
    }

    cout << high << '\n';
    

    return 0;
}


### Prompt

Your task is to create a Cpp solution to the following 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

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;

#define len(x)  (int((x).size()))
#define append push_back
#define pp make_pair
#define ff(a, b)    for (int a = 0; a < int(b); ++a)
#define kk(n)    ff(k, n)
#define xx(n)    ff(x, n)
#define yy(n)    ff(y, n)
#define ii(n)    ff(i, n)
#define fff(a, b, c) for (int a = int(b); a < int(c); ++a)
#define kkk(a, b) fff(k, a, b)
#define xxx(a, b) fff(x, a, b)
#define yyy(a, b) fff(y, a, b)
#define iii(a, b) fff(i, a, b)
#define bb begin()
#define ee end()
#define uu first
#define vv second
#define all(x)  (x).bb, (x).ee
#define ite(v)   decltype((v).bb)
#define fe(i, v) for(ite(v) i = (v).bb; i != (v).ee; ++i)
#define err(...)    { fprintf(stderr, __VA_ARGS__); fflush(stderr); }
#define zz(array, byte)   memset(array, byte, sizeof(array));

using LL = long long;
using DD = long double;
using pii = pair<int, int>;



const LL  INFLL  = 0x7f7f7f7f7f7f7f7fLL;
const int INFint = 0x7f7f7f7f;  //Works with memset(..).
double PI = acos(-1);
 
     

LL nbelow(double area, int N) {
    //Longest chord spans i steps along circumference.
    LL rr = 0;
    iii (1, N / 2 + 1) {
        int start = i;
        int finish = (N - i) / 2;
        if (start > finish)
            continue;
        double base = 2*sin((PI*i)/N);
        double height = 2*area/base;
        double x = height - cos((PI*i)/N);
        if (x < 1) {
            double angle = acos(x);
            double arc = PI - (PI*i)/N - angle;
            finish = min(finish, int(arc * N / (2*PI)));
        }
        if (finish < start)
            continue;
        //Don't count finish, count start only once.
        if (finish > start) {
            LL total = 2*(finish - start - 1) + 1;
            rr += total * LL(N);
        }
        if (finish == (N - i - finish)) {
            if (finish == i) {
                rr += N / 3;
            } else {
                rr += N;
            }
        } else {
            if (finish == start)
                rr += N;
            else
                rr += 2*N;
        } 
    }

    //printf("For %g we have %d\n", area, int(rr));
    return rr;
}



int main() {
    //ios_base::sync_with_stdio(false);     cin.tie(NULL);
    //cout << '\n';
    cout.precision(16);
    

    LL N, K;
    cin >> N >> K;

    double low = 0;
    double high = 10;
    while (high - low > 1e-12) {
        double mid = 0.5*(low + high);
        if (nbelow(mid, int(N)) >= K)
            high = mid;
        else
            low = mid;
    }

    cout << high << '\n';
    

    return 0;
}


```