Petr wants to make a calendar for current month. For this purpose he draws a table in which columns correspond to weeks (a week is seven consequent days from Monday to Sunday), rows correspond to weekdays, and cells contain dates. For example, a calendar for January 2017 should look like on the picture:

<image>

Petr wants to know how many columns his table should have given the month and the weekday of the first date of that month? Assume that the year is non-leap.

Input

The only line contain two integers m and d (1 ≤ m ≤ 12, 1 ≤ d ≤ 7) — the number of month (January is the first month, December is the twelfth) and the weekday of the first date of this month (1 is Monday, 7 is Sunday).

Output

Print single integer: the number of columns the table should have.

Examples

Input

1 7


Output

6


Input

1 1


Output

5


Input

11 6


Output

5

Note

The first example corresponds to the January 2017 shown on the picture in the statements.

In the second example 1-st January is Monday, so the whole month fits into 5 columns.

In the third example 1-st November is Saturday and 5 columns is enough.
#include <bits/stdc++.h>
using namespace std;
long long int Mmax(long long int a, long long int b) {
  if (a > b) return a;
  return b;
}
long long int Mmin(long long int a, long long int b) {
  if (a < b) return a;
  return b;
}
long long int nod(long long int a, long long int b) {
  while (a && b) {
    if (a > b)
      a %= b;
    else
      b %= a;
  }
  return Mmax(a, b);
}
long long int nok(long long int a, long long int b) {
  return a * b / nod(a, b);
}
bool IsPrime(long long int x) {
  if (x < 2) return false;
  long long int X = sqrt(x), i;
  for (i = 2; i <= X; i++)
    if (x % i == 0) return false;
  return true;
}
void hanoi(int n, int A, int C, int B) {
  if (n == 1) {
    cout << n << " " << A << " " << C << endl;
  } else {
    hanoi(n - 1, A, B, C);
    cout << n << " " << A << " " << C << endl;
    hanoi(n - 1, B, C, A);
  }
}
string pr2(string a, int d) {
  if (d == 0) return "0";
  string b;
  long long int sz = a.size(), i, prenos = 0;
  for (i = 0; i < sz; i++) {
    b[i] = a[i];
  }
  for (i = sz - 1; i > -1; i--) {
    a[i] = ((b[i] - '0') * d + prenos) % 10 + '0';
    prenos = ((b[i] - '0') * d + prenos) / 10;
  }
  if (prenos) a = char(prenos + '0') + a;
  return a;
}
string sum(string a, string b) {
  bool carry = false;
  long long int i, sz1, sz2, maxsz, minsz;
  string c, d;
  sz1 = a.size();
  sz2 = b.size();
  maxsz = max(sz1, sz2);
  minsz = min(sz1, sz2);
  while (sz1 < maxsz) {
    sz1++;
    a = '0' + a;
  }
  while (sz2 < maxsz) {
    sz2++;
    b = '0' + b;
  }
  for (i = maxsz - 1; i > -1; i--) {
    d = char((a[i] + b[i] - 96 + carry) % 10 + 48) + d;
    if (a[i] + b[i] - 96 + carry > 9)
      carry = true;
    else
      carry = false;
  }
  if (carry == true) d = char('1') + d;
  return d;
}
string pr(string a, string b) {
  string res = "0", p, p2;
  int sz = a.size(), x = 0;
  for (sz = a.size(); sz > 0; sz--, x++) {
    int d = a[sz - 1] - '0';
    a = a.erase(sz - 1, 1);
    p2 = pr2(b, d);
    p2 += p;
    res = sum(res, p2);
    p += "0";
  }
  return res;
}
bool vesokosna(long long int x) {
  return (x % 4 == 0 && x % 100 || x % 400 == 0);
}
long long int reverse(long long int x) {
  long long int mirror = 0;
  while (x) {
    mirror = mirror * 10 + x % 10;
    x /= 10;
  }
  return mirror;
}
long long int ost(string x, long long int k) {
  long long int num = 0, i, sz = x.size();
  for (i = 0; i < sz; i++) {
    num = num * 10;
    num += x[i] - '0';
    num %= k;
  }
  return num;
}
int cnt[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
  int m, d;
  cin >> m >> d;
  m = cnt[m];
  m += d;
  m--;
  cout << (m / 7 + (m % 7 != 0)) << endl;
  return 0;
}
