#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <iostream>
using namespace std;
#define MAXN (100+10)
#define MAXT (1000+10)
int c[MAXN], w[MAXN];
int dp[MAXN][MAXT];
int main()
{
int T, M;
cin >> T >> M;
for(int i = 1; i <= M; i ++)
scanf("%d%d", &c[i], &w[i]);
for(int i = 1; i <= M; i ++)
for(int j = 1; j <= T; j ++)
if(j-c[i] >= 0)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-c[i]]+w[i]);
else dp[i][j] = dp[i-1][j];
cout << dp[M][T] << endl;
return 0;
}
#include <cstdio>
#include <queue>
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN (100+10)
#define MAXT (1000+10)
int w[MAXN], c[MAXN];
int dp[MAXT];
#define max(u,v) (u>v?u:v)
int main()
{
int T, M;
cin >> T >> M;
for(int i = 1; i <= M; i ++)
scanf("%d%d", &c[i], &w[i]);
for(int i = 1; i <= M; i ++)
for(int j = T; j >= 1; j --)
if(j-c[i] >= 0)
dp[j] = max(dp[j], dp[j-c[i]]+w[i]);
cout << dp[T] << endl;
return 0;
}