/*
如果状态压缩以后能保留我们解题需要的全部信息没,就可以压缩 。
*/
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int dp[1<<16]; //dp[i]表示状态为i的最小花费。
int s[17]; //磨损
int w[17]; //重量
int main(){
int W,n; //载重量和小车数量。
cin>>W>>n;
for(int i=1;i<=n;i++){
cin>>s[i]>>w[i];
}
for(int i=1;i<(1<<n);i++){
int sum=0,sun=0;
for(int k=i,j=1;k;j++,k=k>>1){
if(k&1){
sum+=w[j];
sun=max(s[j],sun);
}
}
if(sum<=W){
dp[i]=sun;
}else{
dp[i]=inf;
for(int j=i;j;j=(j-1)&i){
dp[i]=min(dp[i],dp[j]+dp[j^i]);
}
}
}
cout<<dp[(1<<n)-1]<<endl;
return 0;
}