#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <algorithm>
#include <ctime>

using namespace std;

const int maxN = 50;

vector<int> g[maxN];
vector<int> w[maxN];
pair<int, int> range[maxN];


/*vector<int> ng[maxN];
vector<int> nw[maxN];

void rec(int v, int n, int sum) {
	if (v == n) {
		cerr << sum << endl;
		return;
	}

	for (int i = 0; i < ng[v].size(); ++i) {
		int nv = ng[v][i];
		int nd = nw[v][i];
		rec(nv, n, sum + nd);
	}
}*/

void print(int n, int add) {
	vector<int> order(n);
	for (int i = 0; i < n; ++i) {
		order[i] = i + 1;
	}
	reverse(order.begin(), order.end());

	int cnt = 0;
	for (int i = 0; i < n; ++i) {
		cnt += g[i].size();
	}

	cout << "YES" << endl;
	cout << n << " " << cnt << endl;
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < g[i].size(); ++j) {
			int v1 = order[i];
			int v2 = order[g[i][j]];
			int d = w[i][j];
			if (v1 == 1) {
				d += add;
			}
			cout << v1 << " " << v2 << " " << d << endl;
			//ng[v1].push_back(v2);
			//nw[v1].push_back(d);
		}
	}

	//rec(1, n, 0);
}

void solve() {
	int l, r;
	cin >> l >> r;

	int add = (l - 1);
	l -= add, r -= add;

	int pw = 1;
	int idx = 0;
	while (pw <= r) {
		pw *= 2;
		++idx;
	}

	pw /= 2;
	--idx;

	range[0] = make_pair(0, 0);
	int cnt = idx + 1;
	for (int i = 1; i <= cnt; ++i) {
		int len = (1 << (i - 1));
		range[i] = make_pair(1 << (i - 1), (1 << (i - 1)) + len - 1);
	}

	for (int i = 1; i < cnt; ++i) {
		for (int j = 0; j < i; ++j) {
			g[i].push_back(j);
			w[i].push_back((1 << (i - 1)));
		}
	}

	if (r == pw) {
		for (int i = 0; i < cnt; ++i) {
			g[cnt].push_back(i);
			w[cnt].push_back(1);
		}
		print(cnt + 1, add);
		return;
	}
	else {
		for (int i = 0; i < cnt; ++i) {
			g[cnt].push_back(i);
			w[cnt].push_back(1);
		}

		int mx = pw + 1;

		int beg = cnt + 1;
		g[beg].push_back(0);
		w[beg].push_back(1);
		g[beg].push_back(cnt);
		w[beg].push_back(1);

		for (int i = cnt - 1; i > 0; --i) {
			int lenr = range[i].second - range[i].first + 1;
			if (mx + lenr <= r) {
				g[beg].push_back(i);
				w[beg].push_back(mx - range[i].first + 1);
				mx += lenr;
			}
		}

		cerr << mx << endl;
		print(beg + 1, add);	
	}
}

int main() {
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int t;
	//cin >> t;
	t = 1;


	for (int tt = 0; tt < t; ++tt) {
		solve();
	}




	return 0;

}