'use strict'

process.stdin.resume();
process.stdin.setEncoding('utf8');
var N,M;
var mo=1000000007;
// 標準入力がくると発生するイベント
process.stdin.on('data', function (chunk) {
    chunk.trim().split('\n').forEach(function(line) {
		var arr=line.split(" ");
		N=arr[0];
		M=arr[1];
    });
});
// EOFがくると発生するイベント

function check(Num,N,M){
	
	//作るべきSの数
	let makeS = Num - N;
	if (makeS <= 0) makeS = 0;
	//Sを作るのに使う分をMから引く
	M -= makeS * 2;
	//足りなかったらNG
	if (M < 0) return false;
	N = Num;
	//この時点でCが足りていたらOK、足りて無かったらNG
	if (N * 2 <= M){
		return true;
	}
	else return false;

}

process.stdin.on('end', function () {
	N=parseInt(N);
	M=parseInt(M);
	let maxScc = 1000000000000/2;
	let minScc = 0;
	//binsearch
	let left = minScc,right=maxScc;
	while (right - left != 1){
		let mid = Math.floor((left + right) / 2);
		if (check(mid, N, M)) left = mid;
		else right = mid;
		//console.log(right)
	}
	let ans = check(right, N, M) ? right : left;
	console.log(ans);
});