output_description: Print the minimum number of days on which the same type of cake as the
  previous day will be eaten.
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      K T
      a_1 a_2 ... a_T
attempt: import sys
  import heapq
  import re
  from itertools import permutations
  from bisect import bisect_left, bisect_right
  from collections import Counter, deque
  from math import factorial, sqrt, ceil, gcd
  from functools import lru_cache, reduce
  from decimal import Decimal
  from operator import mul
  
  INF = 1 << 60
  MOD = 1000000007
  sys.setrecursionlimit(10**7)
  
  
  # UnionFind
  class UnionFind:
      def __init__(self, n):
          self.n = n
          self.parents = [-1] * n
  
      def find(self, x):
          if self.parents[x] < 0:
              return x
          else:
              self.parents[x] = self.find(self.parents[x])
              return self.parents[x]
  
      def union(self, x, y):
          x = self.find(x)
          y = self.find(y)
  
          if x == y:
              return
  
          if self.parents[x] > self.parents[y]:
              x, y = y, x
  
          self.parents[x] += self.parents[y]
          self.parents[y] = x
  
      def size(self, x):
          return -self.parents[self.find(x)]
  
      def same(self, x, y):
          return self.find(x) == self.find(y)
  
      def members(self, x):
          root = self.find(x)
          return [i for i in range(self.n) if self.find(i) == root]
  
      def roots(self):
          return [i for i, x in enumerate(self.parents) if x < 0]
  
      def group_count(self):
          return len(self.roots())
  
      def all_group_members(self):
          return {r: self.members(r) for r in self.roots()}
  
      def __str__(self):
          return "\n".join("{}: {}".format(r, self.members(r)) for r in self.roots())
  
  
  # ダイクストラ
  def dijkstra_heap(s, edge, n):
      # 始点sから各頂点への最短距離
      d = [10**20] * n
      used = [True] * n  # True:未確定
      d[s] = 0
      used[s] = False
      edgelist = []
      for a, b in edge[s]:
          heapq.heappush(edgelist, a * (10**6) + b)
      while len(edgelist):
          minedge = heapq.heappop(edgelist)
          # まだ使われてない頂点の中から最小の距離のものを探す
          if not used[minedge % (10**6)]:
              continue
          v = minedge % (10**6)
          d[v] = minedge // (10**6)
          used[v] = False
          for e in edge[v]:
              if used[e[1]]:
                  heapq.heappush(edgelist, (e[0] + d[v]) * (10**6) + e[1])
      return d
  
  
  # 素因数分解
  def factorization(n):
      arr = []
      temp = n
      for i in range(2, int(-(-(n**0.5) // 1)) + 1):
          if temp % i == 0:
              cnt = 0
              while temp % i == 0:
                  cnt += 1
                  temp //= i
              arr.append([i, cnt])
  
      if temp != 1:
          arr.append([temp, 1])
  
      if arr == []:
          arr.append([n, 1])
  
      return arr
  
  
  # 組合せnCr
  def combinations_count(n, r):
      if n < r:
          return 0
      r = min(r, n - r)
      numer = reduce(mul, range(n, n - r, -1), 1)
      denom = reduce(mul, range(1, r + 1), 1)
      return numer // denom
  
  
  # 2数の最小公倍数
  def lcm(x, y):
      return (x * y) // gcd(x, y)
  
  
  # リストの要素の最小公倍数
  def lcm_list(numbers):
      return reduce(lcm, numbers, 1)
  
  
  # リストの要素の最大公約数
  def gcd_list(numbers):
      return reduce(gcd, numbers)
  
  
  # 素数判定
  def is_prime(n):
      if n <= 1:
          return False
      p = 2
      while True:
          if p**2 > n:
              break
          if n % p == 0:
              return False
          p += 1
      return True
  
  
  # limit以下の素数を列挙
  def eratosthenes(limit):
      A = [i for i in range(2, limit + 1)]
      P = []
  
      while True:
          prime = min(A)
  
          if prime > sqrt(limit):
              break
  
          P.append(prime)
  
          i = 0
          while i < len(A):
              if A[i] % prime == 0:
                  A.pop(i)
                  continue
              i += 1
  
      for a in A:
          P.append(a)
  
      return P
  
  
  # 同じものを含む順列
  def permutation_with_duplicates(L):
  
      if L == []:
          return [[]]
  
      else:
          ret = []
  
          # set（集合）型で重複を削除、ソート
          S = sorted(set(L))
  
          for i in S:
  
              data = L[:]
              data.remove(i)
  
              for j in permutation_with_duplicates(data):
                  ret.append([i] + j)
  
          return ret
  
  
  def make_divisors(n):
      lower_divisors, upper_divisors = [], []
      i = 1
      while i * i <= n:
          if n % i == 0:
              lower_divisors.append(i)
              if i != n // i:
                  upper_divisors.append(n // i)
          i += 1
      return lower_divisors + upper_divisors[::-1]
  
  
  # ここから書き始める
  k, t = map(int, input().split())
  a = list(map(int, input().split()))
  ans = max(0, -sum(a) + 2 * max(a) - 1)
  print(ans)
  
problem_description: Statement
  
  There are K pieces of cakes. Mr. Takahashi would like to eat one cake per day,
  taking K days to eat them all.
  
  There are T types of cake, and the number of the cakes of type i (1 ≤ i ≤ T)
  is a_i.
  
  Eating the same type of cake two days in a row would be no fun, so Mr.
  Takahashi would like to decide the order for eating cakes that minimizes the
  number of days on which he has to eat the same type of cake as the day before.
  
  Compute the minimum number of days on which the same type of cake as the
  previous day will be eaten.
samples: [{"input": "7 3\n    3 2 2", "output": "0\n    \n\nFor example, if Mr. Takahashi eats cakes in the order of 2, 1, 2, 3, 1, 3, 1,\nhe can avoid eating the same type of cake as the previous day.\n\n* * *"}, {"input": "6 3\n    1 4 1", "output": "1\n    \n\nThere are 6 cakes. For example, if Mr. Takahashi eats cakes in the order of 2,\n3, 2, 2, 1, 2, he has to eat the same type of cake (i.e., type 2) as the\nprevious day only on the fourth day. Since this is the minimum number, the\nanswer is 1.\n\n* * *"}, {"input": "100 1\n    100", "output": "99\n    \n\nSince Mr. Takahashi has only one type of cake, he has no choice but to eat the\nsame type of cake as the previous day from the second day and after."}]