def can_assign(tasks, k, T): tasks.sort(reverse=True) return backtrack(tasks, 0, [0] * k, T) def backtrack(tasks, index, groups, T): if index == len(tasks): return True task = tasks[index] groups = sorted(groups) for i in range(len(groups)): if i > 0 and groups[i] == groups[i-1]: continue if groups[i] + task <= T: new_groups = list(groups) new_groups[i] += task if backtrack(tasks, index + 1, new_groups, T): return True return False def main(): import sys input = sys.stdin.read().split() ptr = 0 T = int(input[ptr]) ptr += 1 N = int(input[ptr]) ptr += 1 t_i = [] for _ in range(N): t_i.append(int(input[ptr])) ptr += 1 sum_t = sum(t_i) min_k = (sum_t + T - 1) // T for k in range(min_k, N + 1): if sum_t > k * T: continue tasks = sorted(t_i, reverse=True) if can_assign(tasks, k, T): print(k) return print(N) if __name__ == "__main__": main()