//标准的0/1背包,模板题
#include<iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include<vector>
using namespace std;

const int MAXN = 120;
int t_cost[MAXN];
int value[MAXN];
int dp_result[120][1200];

int dp(int m, int t)
{
	if (m == -1||t==0)
	{
		return 0;
	}
	else if (dp_result[m][t] != 0)
	{
		return dp_result[m][t];
	}
	else
	{
		if (t >= t_cost[m])
		{

			dp_result[m][t] = max(dp(m - 1, t), dp(m - 1, t - t_cost[m])+value[m]);
			return dp_result[m][t];
		}
		else
		{
			dp_result[m][t] = dp(m - 1, t);
			return dp_result[m][t];
		}
	}
}
int main() 
{
	fill(dp_result[0], dp_result[0] + 120 * 1200, 0);
	int T, M;
	scanf("%d %d", &T, &M);
	for (int i = 0; i < M; i++)
	{
		scanf("%d %d", &t_cost[i], &value[i]);

	}
	cout << dp(M - 1, T);


}