#include <bits/stdc++.h>
using namespace std;
const long long LIM = 2e5 + 5, MOD = 1e9 + 7;
const long double EPS = 1e-9;
void bandev() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
bool isPrimeSeive(long long k) {
  if (k == 2) return true;
  if (k % 2 == 0) return false;
  bitset<1000> bs;
  for (int i = 2; i <= k; i++) {
    if (bs[i] == 0) {
      for (int j = i * i; j <= k; j += i) {
        bs |= 1 << j;
      }
    }
  }
  if (bs[k]) return false;
  return true;
}
bool checkPr(long long k) {
  if (k == 2) return true;
  if (k % 2 == 0) return false;
  for (int i = 3; i * i <= k; i += 2) {
    if (k % i == 0) return false;
  }
  return true;
}
int gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int lcm(long long a, long long b) { return a * b / gcd(a, b); }
void printArr(vector<long long> nw) {
  for (long long i = 0; i < nw.size(); i++) cout << nw[i] << " ";
  cout << endl;
}
void printMat(vector<vector<long long> > mat) {
  for (long long i = 0; i < mat.size(); i++) {
    for (long long j = 0; j < mat[i].size(); j++) {
      printf("%d ", int(mat[i][j]));
    }
    printf("\n");
  }
}
long long sizeDecimal(long long k) {
  if (k == 0) return 1;
  long long num = 0;
  while (k > 0) {
    num++;
    k /= 10;
  }
  return num;
}
long long sz(vector<long long> arr) {
  if (arr.empty()) return 0;
  return arr.size();
}
set<long long> st;
long long mx = 0;
vector<long long> pows;
long long powMOD(long long n, long long k) {
  if (k == 0) return 1;
  if (pows[k] > -1) return pows[k];
  if (k % 2 == 0)
    pows[k] = (powMOD(n, k / 2) * powMOD(n, k / 2)) % MOD;
  else
    pows[k] = (((powMOD(n, k / 2) * powMOD(n, k / 2)) % MOD) * n) % MOD;
  return pows[k];
}
long long power(long long x, long long y, long long p) {
  long long res = 1;
  x = x % p;
  if (x == 0) return 0;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
class Graph {
  int V;
  list<int>* adj;
  void DFSUtil(int v, bool visited[]);

 public:
  Graph(int V);
  void addEdge(int v, int w);
  int NumberOfconnectedComponents();
};
int Graph::NumberOfconnectedComponents() {
  bool* visited = new bool[V];
  int count = 0;
  for (int v = 0; v < V; v++) visited[v] = false;
  for (int v = 0; v < V; v++) {
    if (visited[v] == false) {
      DFSUtil(v, visited);
      count += 1;
    }
  }
  return count;
}
void Graph::DFSUtil(int v, bool visited[]) {
  visited[v] = true;
  list<int>::iterator i;
  for (i = adj[v].begin(); i != adj[v].end(); ++i)
    if (!visited[*i]) DFSUtil(*i, visited);
}
Graph::Graph(int V) {
  this->V = V;
  adj = new list<int>[V];
}
long long Euler_totient_function(long long n) {
  long long result = 1;
  for (long long i = 2; i * i <= n; i++) {
    long long c = 0;
    if (n % i == 0) {
      while (n % i == 0) {
        c++;
        n /= i;
      }
    }
    if (c > 0) {
      long long power = (long long)pow(i, c - 1);
      long long sm = (long long)pow(i, c - 1) * (i - 1);
      result *= sm;
    }
  }
  if (n > 1) {
    result *= (n - 1);
  }
  return result;
}
void Graph::addEdge(int v, int w) {
  adj[v].push_back(w);
  adj[w].push_back(v);
}
void ad(vector<long long>& cur, vector<long long> nx, long long k) {
  for (long long i = 0; i < 26; i++) {
    cur[i] += k * nx[i];
  }
}
bool sortCol(const vector<long long> v1, const vector<long long> v2) {
  return v1[0] < v2[0];
}
vector<vector<map<long long, long long> > > dp;
vector<long long> vec;
long long ret(long long i, long long k, long long lst) {
  if (i == vec.size()) return 0;
  if (k < 0) {
    return -100000;
  }
  map<long long, long long> nw = dp[i][k];
  if (nw.find(lst) != nw.end()) {
    return nw[lst];
  }
  if (lst == vec[i] || lst == 10000) {
    dp[i][k][lst] = ret(i + 1, k, vec[i]) + 1;
  } else {
    if (k > 0)
      dp[i][k][lst] = max(ret(i + 1, k - 1, vec[i]) + 1, ret(i + 1, k, lst));
    else
      dp[i][k][lst] = ret(i + 1, k, lst);
  }
  return dp[i][k][lst];
}
long long check_square(long long n) {
  long long st = 1, en = pow(10, sizeDecimal(n) / 2 + 1);
  long long mid = (st + en) / 2;
  while (st <= en) {
    mid = (st + en) / 2;
    if (mid * mid < n) {
      st = mid + 1;
    } else if (mid * mid > n) {
      en = mid - 1;
    } else
      return mid;
  }
  return -1;
}
bool check_prime(long long n) {
  if (n == 2) return true;
  if (n % 2 == 0) {
    return false;
  }
  for (long long i = 3; i * i <= n; i += 2) {
    if (n % i == 0) return false;
  }
  return true;
}
void run_case(long long test) {
  long long n, k;
  cin >> n >> k;
  long long rs = 240 - k;
  long long i = 0;
  while ((5 * (i) * (i + 1)) / 2 <= rs) {
    i++;
  }
  cout << min(i - 1, n) << endl;
}
int main() {
  run_case(1);
  return 0;
}
