#include<bits/stdc++.h>
using namespace std;
#define maxn 110
#define INF 0x3f3f3f3f
int n,m;int p[40];
int f[40][maxn],g[40][maxn];
//status:考虑到第i个人,分配了j个仓库的解
int main()
{
while(scanf("%d%d",&n,&m)==2&&(n||m))
{
for(int i=1;i<=m;i++)scanf("%d",&p[i]);
memset(f,0,sizeof(f));
for(int i=1;i<=m;i++)//枚举人
{
f[i-1][0] = INF;
for(int j=1;j<=n;j++)//枚举仓库
{
f[i][j] = f[i-1][j];
for(int k=1;k<=j;k++)//枚举分配
{
f[i][j] = max(f[i][j],min(f[i-1][j-k],p[i]/k));//最小值最大
}
}
}
memset(g,0x3f,sizeof(g));
for(int i=1;i<=m;i++)
{
g[i-1][0] = 0;
for(int j=1;j<=n;j++)
{
g[i][j] = g[i-1][j];
for(int k=1;k<=j;k++)
{
int s = p[i]/k;//当前已经到达最优解
if(s>=f[m][n]){//更改能力值 这里>= 如果是==就要WA
g[i][j] = min(g[i][j],g[i-1][j-k]+p[i]);
}
}
}
}
printf("%d %d\n",f[m][n],f[m][n]==0?0:g[m][n]);
}
return 0;
}