/*
input
3 5
8 4 3 1 10
output
13
*/
import java.util.Arrays;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String line1 = sc.nextLine();
String line2 = sc.nextLine();
int m = Integer.parseInt(line1.split(" ")[0]);
int n = Integer.parseInt(line1.split(" ")[1]);
String[] task = line2.split(" ");
int[] arr = new int[n];
int total = 0;
for(int i=0;i<n;i++){
arr[i]=Integer.parseInt(task[i]);
total += arr[i];
}
//sorted
Arrays.sort(arr);
//default value is 0;
if(m>n){
System.out.println(arr[arr.length-1]);
}else {
//plan A
// doing tasks
int[] processingTask = new int[m];
System.arraycopy(arr,0,processingTask,0,m);
for(int i=m;i<n;i++){
//find the min value of processingTask
int min = processingTask[0];
int index = 0;
for(int j=1;j<m;j++){
if(min>processingTask[j]){
min = processingTask[j];
index = j;
}
}
processingTask[index] += arr[i];
}
//find max value and print
int max = processingTask[0];
for(int j=1;j<m;j++){
if(max<processingTask[j]){
max = processingTask[j];
}
}
//System.out.println(max);
//plan B
int time = 0;
int asignment = 0;
int[] processingTask2 = new int[m];
while (total > 0) {
for (int i = 0; i < m; i++) {
if (processingTask2[i] == 0 && asignment<n) {
processingTask2[i] = arr[asignment];
asignment++;
}
if(processingTask2[i] > 0) {
processingTask2[i] -= 1;
total -=1;
}
}
time ++;
}
System.out.println(time);
}
}
}