#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")