#include <bits/stdc++.h>
#include <vector>
using namespace std;
//定义一个草药的结构体
struct st{
int Time;//采这个草药的时间
int value;//这个草药的价值
};
int main() {
int time,type;//你所拥有的时间以及草药的种类
st one;
while(cin>>time>>type)
{
vector<st> s;//存储草药的采摘耗时以及价值
int maxvalue=0;//我们能够获得的最大的价值
for(int i=0;i<type;i++)
{
cin>>one.Time>>one.value;
s.push_back(one);
}
//dp[i]的意思是i的时间最多可以获取多少价值
vector<int> dp(1001,0);
for(int i=0;i<type;i++)//先遍历物品
{
for(int j=time;j>=1;j--)//再遍历背包,注意从大到小
{
if(j-s[i].Time>=0)//如果够装,再选择装or不装
dp[j]=max(dp[j],dp[j-s[i].Time]+s[i].value);
maxvalue=max(maxvalue,dp[j]);//随时更新maxvalue
}
}
cout<<maxvalue<<endl;
}
}
// 64 位输出请用 printf("%lld")