#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAXV 200001#define MAXN 11int dp[MAXV], val[MAXN], cnt[MAXN];void zero_one_knapsack(int max_v, int v){ for(int i = max_v; i >= v; i --) { if( dp[i-v] ) { dp[i] = 1; } }}void complete_knapsack(int max_v, int v){ for(int i = 0; i <= max_v-v; i ++) { if( dp[i] ) { dp[i+v] = 1; } }}int knapsack(int max_v, int n){ int binary, tot; memset(dp, 0, sizeof(dp)); dp[0] = 1; for(int i = 0; i < n; i ++) { if( val[i]*cnt[i] >= max_v ) { complete_knapsack(max_v, val[i]); } else { binary = 1; tot = cnt[i]; while( binary < tot ) { zero_one_knapsack(max_v, val[i]*binary); tot -= binary; binary <<= 1; } zero_one_knapsack(max_v, tot*val[i]); } } for(int i = max_v; i >= 0; i --) { if( dp[i] ) { return i; } }}int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGE freopen("test.in", "r", stdin);#endif int max_v, n; while( ~scanf("%d %d", &max_v, &n) ) { for(int i = 0; i < n; i ++) { scanf("%d %d", &cnt[i], &val[i]); } printf("%d\n", knapsack(max_v, n)); } return 0;}