#include <bits/stdc++.h>
using namespace std;
const int INF = 1000 * 1000 * 1000 + 7;
const long long LINF = 1LL * INF * INF;
const int MAX = 1e5 + 7;
const double PI = acos(-1.);
const double EPS = 1e-7;
const int MOD = 998244353;
const int MAXF = 1000000000;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, -1, 1};
bool isInField(int x, int y) {
  return 1 <= x && x <= MAXF && 1 <= y && y <= MAXF;
}
bool isWhite(int x, int y) { return x % 2 == y % 2; }
void solve() {
  int black, white;
  cin >> black >> white;
  map<pair<int, int>, int> was;
  vector<pair<int, int> > ans;
  int sX = 200000, sY = 200000;
  if (black > white) {
    sX++;
    --black;
  } else {
    --white;
  }
  ans.emplace_back(sX, sY);
  was[{sX, sY}] = 1;
  while (black > 0 && white > 0) {
    --black;
    --white;
    ++sX;
    ans.emplace_back(sX, sY);
    was[{sX, sY}] = 1;
    ++sX;
    ans.emplace_back(sX, sY);
    was[{sX, sY}] = 1;
  }
  for (int i = 0; i < (((int)ans.size())); ++i) {
    int x = ans[i].first;
    int y = ans[i].second;
    for (int j = 0; j < (4); ++j) {
      int a = x + dx[j];
      int b = y + dy[j];
      if (black > 0) {
        if (!was.count({a, b}) && !isWhite(a, b)) {
          --black;
          ans.emplace_back(a, b);
          was[{a, b}] = 1;
        }
      } else if (white > 0) {
        if (!was.count({a, b}) && isWhite(a, b)) {
          --white;
          ans.emplace_back(a, b);
          was[{a, b}] = 1;
        }
      }
    }
  }
  if (black != 0 || white != 0) {
    cout << "NO\n";
    return;
  }
  cout << "YES\n";
  for (auto [x, y] : ans) {
    cout << x << ' ' << y << endl;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  int q;
  cin >> q;
  while (q--) {
    solve();
  }
  return 0;
}
