//经典的0-1背包问题
#include "stdio.h"
#include "algorithm"
using namespace std;
int T,M;//T为总时间,M为草药株树
int plantTime[110];
int val[110];
int bag[110][1010];
void Init(){//构造背包的动态规划二维数组
for (int i = 0; i <= M; ++i) {
for (int j = 0; j <= T; ++j) {
if(i == 0 || j == 0){
bag[i][j] == 0;
continue;
}
if(plantTime[i] > j){
bag[i][j] = bag[i-1][j];
} else{
bag[i][j] = max(bag[i-1][j],bag[i-1][j-plantTime[i]]+val[i]);
}
}
}
}
int main(){
while (scanf("%d%d",&T,&M)!=EOF){
for (int i = 1; i <= M; ++i) {
scanf("%d%d",plantTime+i,val+i);
}
Init();
printf("%d\n",bag[M][T]);
}
}