description: You are given an integer array a_1, a_2, ..., a_n and integer k.
  
  In one step you can 
  
    * either choose some index i and decrease a_i by one (make a_i = a_i - 1); 
    * or choose two indices i and j and set a_i equal to a_j (make a_i = a_j). 
  
  
  
  What is the minimum number of steps you need to make the sum of array ∑_{i=1}^{n}{a_i} ≤ k? (You are allowed to make values of array negative).
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of test cases.
  
  The first line of each test case contains two integers n and k (1 ≤ n ≤ 2 ⋅ 10^5; 1 ≤ k ≤ 10^{15}) — the size of array a and upper bound on its sum.
  
  The second line of each test case contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^9) — the array itself.
  
  It's guaranteed that the sum of n over all test cases doesn't exceed 2 ⋅ 10^5.
  
  Output
  
  For each test case, print one integer — the minimum number of steps to make ∑_{i=1}^{n}{a_i} ≤ k.
  
  Example
  
  Input
  
  
  4
  1 10
  20
  2 69
  6 9
  7 8
  1 2 1 3 1 2 1
  10 1
  1 2 3 1 2 6 1 6 8 10
  
  
  Output
  
  
  10
  0
  2
  7
  
  Note
  
  In the first test case, you should decrease a_1 10 times to get the sum lower or equal to k = 10.
  
  In the second test case, the sum of array a is already less or equal to 69, so you don't need to change it.
  
  In the third test case, you can, for example: 
  
    1. set a_4 = a_3 = 1; 
    2. decrease a_4 by one, and get a_4 = 0. 
  
  As a result, you'll get array [1, 2, 1, 0, 1, 2, 1] with sum less or equal to 8 in 1 + 1 = 2 steps.
  
  In the fourth test case, you can, for example: 
  
    1. choose a_7 and decrease in by one 3 times; you'll get a_7 = -2; 
    2. choose 4 elements a_6, a_8, a_9 and a_{10} and them equal to a_7 = -2. 
  
  As a result, you'll get array [1, 2, 3, 1, 2, -2, -2, -2, -2, -2] with sum less or equal to 1 in 3 + 4 = 7 steps.
solution: import os
  import sys
  from bisect import bisect, bisect_left, insort, insort_left
  from heapq import heapify, heappop, heappush, nlargest, nsmallest
  from io import BytesIO, IOBase
  from math import ceil, floor, inf, sqrt
  from types import GeneratorType
  
  # Fast IO for Python
  
  BUFSIZE: int = 8192
  
  
  class FastIO(IOBase):
      newlines = 0
  
      def __init__(self, file):
          self._fd = file.fileno()
          self.buffer = BytesIO()
          self.writable = "x" in file.mode or "r" not in file.mode
          self.write = self.buffer.write if self.writable else None
  
      def read(self):
          while True:
              b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
              if not b:
                  break
              ptr = self.buffer.tell()
              self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
          self.newlines = 0
          return self.buffer.read()
  
      def readline(self):
          while self.newlines == 0:
              b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
              self.newlines = b.count(b"\n") + (not b)
              ptr = self.buffer.tell()
              self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
          self.newlines -= 1
          return self.buffer.readline()
  
      def flush(self):
          if self.writable:
              os.write(self._fd, self.buffer.getvalue())
              self.buffer.truncate(0), self.buffer.seek(0)
  
  
  class IOWrapper(IOBase):
      def __init__(self, file):
          self.buffer = FastIO(file)
          self.flush = self.buffer.flush
          self.writable = self.buffer.writable
          self.write = lambda s: self.buffer.write(s.encode("ascii"))
          self.read = lambda: self.buffer.read().decode("ascii")
          self.readline = lambda: self.buffer.readline().decode("ascii")
  
  
  def print(*args, **kwargs):
      """Prints the values to a stream, or to sys.stdout by default."""
      sep, file = kwargs.pop("sep", " "), kwargs.pop("file", sys.stdout)
      at_start = True
      for x in args:
          if not at_start:
              file.write(sep)
          file.write(str(x))
          at_start = False
      file.write(kwargs.pop("end", "\n"))
      if kwargs.pop("flush", False):
          file.flush()
  
  
  sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
  def input(): return sys.stdin.readline().rstrip("\r\n")
  
  
  # Bootstrap used for recursion, use yield instead of return
  
  def bootstrap(f, stack=[]):
      def wrappedfunc(*args, **kwargs):
          if stack:
              return f(*args, **kwargs)
          else:
              to = f(*args, **kwargs)
              while True:
                  if type(to) is GeneratorType:
                      stack.append(to)
                      to = next(to)
                  else:
                      stack.pop()
                      if not stack:
                          break
                      to = stack[-1].send(to)
              return to
      return wrappedfunc
  
  
  # Never use += for string concatenation
  # Always use .join for string concatenation
  # Use PyPy3 for Codeforces
  # Use Python3 for Codechef
  
  # Function to compute inverse of a under modulo m
  
  def modInverse(a, m):
  
      g = gcd(a, m)
  
      if (g != 1):
          return -1
  
      else:
          # If a and m are relatively prime,
          # then modulo inverse is a^(m-2) mode m
          return power(a, m - 2, m)
  
  
  # Function to compute x^y under modulo m
  
  def power(x, y, m):
  
      if (y == 0):
          return 1
  
      p = power(x, y // 2, m) % m
      p = (p * p) % m
  
      if(y % 2 == 0):
          return p
      else:
          return ((x * p) % m)
  
  
  # Function to return gcd of a and b
  
  def gcd(a, b):
      if (a == 0):
          return b
  
      return gcd(b % a, a)
  
  
  # Sieve of Eratosthenes to get prime upto n
  
  def SieveOfEratosthenes(n):
      prime = [True for i in range(n+1)]
      p = 2
      while (p * p <= n):
  
          # If prime[p] is not
          # changed, then it is a prime
          if (prime[p] == True):
  
              # Update all multiples of p
              for i in range(p * p, n+1, p):
                  prime[i] = False
          p += 1
  
      ans = set()
      for p in range(2, n+1):
          if prime[p]:
              ans.add(p)
  
      return ans
  
  
  MOD = 1000000007
  INT_MAX = inf
  INT_MIN = -inf
  
  
  # Main function
  
  def main():
      t = int(input())
      for _ in range(t):
          temp = list(map(int, input().split()))
          n, k = temp[0], temp[1]
          a = list(map(int, input().split()))
          s = sum(a)
          if s <= k:
              print(0)
          elif n == 1:
              print(s-k)
          else:
              a.sort()
  
              pre = [a[0]]
              for i in range(1, n):
                  pre.append(pre[-1]+a[i])
  
              ans3 = INT_MAX
              for i in range(0, n):
                  x = floor((k+pre[0]-pre[i])/(n-i))
                  if x > a[0]:
                      ans3 = (n-i-1)
                  else:
                      ans3 = min(ans3, a[0]-x+(n-i-1))
  
              print(min(ans3, s-k))
  
  
  main()
  