//标准的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);
}