import java.io.*; import java.util.*; public class clearing_mb { static double solveGivenStart(double[][] areas, double[] c, int nPosts, int start, double[] dp) { Arrays.fill(dp, Double.POSITIVE_INFINITY); dp[start] = 0; int n = c.length; for (int p = 2; p <= nPosts; ++p) { int minPrevIdx = start + p - 2; for (int i = n - 1; i > minPrevIdx; --i) { double curr = Double.POSITIVE_INFINITY; double[] areasEndingHere = areas[i]; for (int prev = minPrevIdx; prev < i; ++prev) { curr = Math.min(curr, dp[prev] + areasEndingHere[prev]); } dp[i] = curr; } } double result = Double.POSITIVE_INFINITY; for (int i = start + nPosts - 1; i < n; ++i) { result = Math.min(result, dp[i] + areas[start][i]); } return result; } static double solve(double[] c, int p) { int n = c.length; double[][] areas = new double[n][n]; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { double diff = c[i] - c[j]; if (diff < 0) { diff += Math.PI * 2; } areas[i][j] = (diff - Math.sin(diff)) / 2; } } double result = Double.POSITIVE_INFINITY; double[] dp = new double[n]; for (int start = 0; start + p <= n; ++start) { double forStart = solveGivenStart(areas, c, p, start, dp); result = Math.min(result, forStart); } return result; } public static void main(String[] args) throws IOException { try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in))) { int n = Integer.parseInt(in.readLine()); int p = Integer.parseInt(in.readLine()); double[] c = new double[n]; StringTokenizer positions = new StringTokenizer(in.readLine()); for (int i = 0; i < n; ++i) { c[i] = Math.toRadians(Double.parseDouble(positions.nextToken())); } System.out.println(1e6 * (Math.PI - solve(c, p))); } } }