# https://atcoder.jp/contests/abc116/tasks/abc116_d

N, K = gets.split.map(&:to_i)
max_in_type = {}
values = []

N.times do
  temp = gets.split.map(&:to_i)
  max_in_type[temp[0]] = temp[1] if !(max_in_type[temp[0]]&.>(temp[1]))
  values << (temp[1] << 17) + temp[0]
end

ph = []
sum = 0
use_type_count = 0
type_flags = {}

t_mask = (1 << 17) - 1

values.sort.reverse[0...K].each do |t_v|
  t = t_v & t_mask
  v = t_v >> 17
  sum += v
  if !type_flags[t]
    type_flags[t] = true
    use_type_count += 1
  else
    ph << v
  end
end
ph.sort!
ans = sum + use_type_count**2

rph = max_in_type.select { |t, v| !type_flags[t] }.values.sort.reverse

t = 0
phsize = ph.size
rphsize = rph.size
(phsize > rphsize ? rphsize : phsize).times do |i|
  sum = sum - ph[i] + rph[i]
  t = sum + (use_type_count += 1)**2
  ans = t if t > ans
end

p ans