var lines = []; var result = 0;

var readline = require("readline");

var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', function (x) {
    lines.push(x);
});

rl.on('close', function () {
    var N = Number(lines[0].split(" ")[0])
    var K = Number(lines[0].split(" ")[1])
    lines.shift()

    var td = lines.map(i => i.split(" ").map(i => Number(i)))

    // ネタでソート
    td.sort((a, b) => a[0] - b[0])

    var result = {};

    // ネタの種類は最大限まで増やす
    for (var i = 0; i < N - 1; i++) {
        if (td[i + 1][0] !== td[i][0]) { result[td[i][0]] = td[i][1] }
    }
    // 最後の要素も忘れずに
    result[td[N - 1][0]] = td[N - 1][1]

    // 現在選択したネタが最適か調査
    for (var i = 0; i < N; i++) {
        if (result[td[i][0]] < td[i][1]) { result[td[i][0]] = td[i][1] }
    }

    // 満足ポイント計算
    var ans_1 = Math.pow(Object.keys(result).length, 2);
    Object.keys(result).forEach(value => {
        ans_1 += result[value];
    });




    // 美味しさでソート
    td.sort((a, b) => b[1] - a[1])

    var ans_2 = 0; var kind = {}; var i = 0;
    // 満足ポイント計算　美味しさが上位のモノから食べる作戦
    while (i < K) {
        if (kind[td[i][0]] === undefined) { kind[td[i][0]] = 0; }
        kind[td[i][0]]++;
        ans_2 += td[i][1];
        i++;
    }

    ans_2 += Math.pow(Object.keys(kind).length, 2)
    
    console.log(Math.max(ans_1, ans_2))
});