#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3;
int dp[maxn][maxn];
int Dp(int i, int j) {
  if (i <= 0 or j <= 0) return 0;
  if (i == 1 and j == 1) return 0;
  if (i == 1) {
    if (dp[i + 1][j - 2] == 0) dp[i + 1][j - 2] = Dp(i + 1, j - 2);
    return dp[i + 1][j - 2] + 1;
  }
  if (j == 1) {
    if (dp[i - 2][j + 1] == 0) dp[i - 2][j + 1] = Dp(i - 2, j + 1);
    return dp[i - 2][j + 1] + 1;
  }
  if (dp[i + 1][j - 2] == 0) dp[i + 1][j - 2] = Dp(i + 1, j - 2);
  if (dp[i - 2][j + 1] == 0) dp[i - 2][j + 1] = Dp(i - 2, j + 1);
  return max(dp[i - 2][j + 1], dp[i + 1][j - 2]) + 1;
}
int main() {
  int a1, a2;
  cin >> a1 >> a2;
  cout << Dp(a1, a2);
}
