#include<cstdio>
#include<cstring>
#include<algorithm>
#include <iostream>
using namespace std;
//抄博友程序
const int maxn = 10 + 5,maxc = 100000 + 5;
int dp[maxc],num[maxc];
int dk[maxn],nk[maxn];
int main(){
int cash,n;
while(scanf("%d %d",&cash,&n) != EOF){
memset(dp,0,sizeof(dp));
for(int i = 0;i < n;i++){
scanf("%d %d",&nk[i],&dk[i]);
}
int zd=0;
for(int i = 0;i < n;i++){
memset(num,0,sizeof(num));
for(int j = 0;j <= cash;j++){
if(j>=dk[i] && dp[j] < dp[j-dk[i]] + dk[i] && num[j-dk[i]] < nk[i]){
dp[j] = dp[j-dk[i]] + dk[i];
num[j] = num[j-dk[i]] + 1;
zd=max(zd,dp[j]);
}
//cout<<dp[j]<<" ";
}
//cout<<endl;
}
//printf("%d\n",dp[cash]);//9 3 1 5 1 2 1 1 //5//博友程序可能有错误
printf("%d\n",zd);//9 3 1 5 1 2 1 1 //8
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
//经典
int dp[100008];
int num[100008];
int nk[100];
int dk[100];
int main()
{
int cash, n;
while(cin>>cash>>n)
{
memset(dp,-0x3f,sizeof(dp));
dp[0]=0;
memset(nk,0,sizeof(nk));
memset(dk,0,sizeof(dk));
for(int i=0;i<n;i++)
{
cin>>nk[i]>>dk[i];
}
for(int i=0;i<n;i++)
{
memset(num,0,sizeof(num));
for(int j=0;j<=cash;j++)
{
if(j>=dk[i] && dp[j]<(dp[j-dk[i]]+dk[i]) &&nk[i]>num[j-dk[i]])
{
dp[j]=(dp[j-dk[i]]+dk[i]);
num[j]=num[j-dk[i]]+1;//没掌握
}
}
}
int jg=0;
for(int i=0;i<=cash;i++)
{
jg=max(jg,dp[i]);
}
cout<<jg<<endl;
}
return 0;
}