#include <bits/stdc++.h>
using namespace std;
vector<priority_queue<int> > v_pr;
void solve() {
  int n, t;
  scanf("%d%d", &n, &t);
  v_pr.resize(t + 1);
  for (int i(0), _l((int)(n)-1); i <= _l; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    v_pr[t - a].push(b);
  }
  for (int i(t); i >= 1; --i) {
    while (!v_pr[i].empty()) {
      int tp(v_pr[i].top());
      v_pr[i].pop();
      if (!v_pr[i].empty()) {
        tp += v_pr[i].top();
        v_pr[i].pop();
      }
      v_pr[i - 1].push(tp);
    }
  }
  printf("%d\n", v_pr[0].top());
}
int main() {
  solve();
  return 0;
}
