Appleman has n cards. Each card has an uppercase letter written on it. Toastman must choose k cards from Appleman's cards. Then Appleman should give Toastman some coins depending on the chosen cards. Formally, for each Toastman's card i you should calculate how much Toastman's cards have the letter equal to letter on ith, then sum up all these quantities, such a number of coins Appleman should give to Toastman.

Given the description of Appleman's cards. What is the maximum number of coins Toastman can get?

Input

The first line contains two integers n and k (1 ≤ k ≤ n ≤ 105). The next line contains n uppercase letters without spaces — the i-th letter describes the i-th card of the Appleman.

Output

Print a single integer – the answer to the problem.

Examples

Input

15 10
DZFDFZDFDDDDDDF


Output

82


Input

6 4
YJSNPI


Output

4

Note

In the first test example Toastman can choose nine cards with letter D and one additional card with any letter. For each card with D he will get 9 coins and for the additional card he will get 1 coin.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.*;
import java.math.BigInteger;
import java.util.*;
import java.text.*;

public class cf462b {

    static BufferedReader br;
    static Scanner sc;
    static PrintWriter out;
    
    public static void initA() {
        try {
            br = new BufferedReader(new InputStreamReader(System.in));
            sc = new Scanner(System.in);
            out = new PrintWriter(System.out);
        } catch (Exception e) {
        }
    }
    
    static boolean next_permutation(Integer[] p) {
        for (int a = p.length - 2; a >= 0; --a) {
            if (p[a] < p[a + 1]) {
                for (int b = p.length - 1;; --b) {
                    if (p[b] > p[a]) {
                        int t = p[a];
                        p[a] = p[b];
                        p[b] = t;
                        for (++a, b = p.length - 1; a < b; ++a, --b) {
                            t = p[a];
                            p[a] = p[b];
                            p[b] = t;
                        }
                        return true;
                    }
                }
            }
        }
        return false;
    }
    
    public static String getString() {
        try {
            return br.readLine();
        } catch (Exception e) {
        }
        return "";
    }
    
    public static Integer getInt() {
        try {
            return Integer.parseInt(br.readLine());
        } catch (Exception e) {
        }
        return 0;
    }
    
    public static Integer[] getIntArr() {
        try {
            StringTokenizer temp = new StringTokenizer(br.readLine());
            int n = temp.countTokens();
            Integer temp2[] = new Integer[n];
            for (int i = 0; i < n; i++) {
                temp2[i] = Integer.parseInt(temp.nextToken());
            }
            return temp2;
        } catch (Exception e) {
        }
        return null;
    }
    
    public static Long[] getLongArr() {
        try {
            StringTokenizer temp = new StringTokenizer(br.readLine());
            int n = temp.countTokens();
            Long temp2[] = new Long[n];
            for (int i = 0; i < n; i++) {
                temp2[i] = Long.parseLong(temp.nextToken());
            }
            return temp2;
        } catch (Exception e) {
        }
        return null;
    }
    
    public static String[] getStringArr() {
        try {
            StringTokenizer temp = new StringTokenizer(br.readLine());
            int n = temp.countTokens();
            String temp2[] = new String[n];
            for (int i = 0; i < n; i++) {
                temp2[i] = (temp.nextToken());
            }
            return temp2;
        } catch (Exception e) {
        }
        return null;
    }
    
    public static void print(Object a) {
        out.println(a);
    }
    
    public static void print(String s, Object... a) {
        out.printf(s, a);
    }
    
    public static int nextInt() {
        return sc.nextInt();
    }
    
    public static double nextDouble() {
        return sc.nextDouble();
    }
    
    public static void main(String[] ar) {
        initA();
        cf462b c = new cf462b();
        c.solve();
        out.flush();
    }
    
    void solve() {
        Integer xx[] = getIntArr();
        long n = xx[0], k =xx[1];
        char data[] = getString().toCharArray();
        
        int num[] = new int[256];
        for(char p : data){
            num[p]++;
        }
        ArrayList<Long> t = new ArrayList<Long>();
        for(int i =0 ;i<256;i++){
            if(num[i] > 0){
                t.add((long)num[i]);
            }
        }
        Collections.sort(t);
        Collections.reverse(t);
        long ou = 0;
        int i = 0;
        while(k > 0){
            long ambil = Math.min(k,t.get(i));
            k-=ambil;
            ou+=(ambil*ambil);
            i++;            
        }
        print(ou);
    }
}
