#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T& a, const T& b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T& a, const T& b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
const long long int MOD = 1e9 + 7, INF = 1e18;
long long int dx[8] = {0, -1, 1, 0, 1, -1, 1, -1},
              dy[8] = {1, 0, 0, -1, -1, -1, 1, 1};
struct edge {
  long long int cost;
  long long int u, v;
};
long long int T, B, W;
long long int init_x = 500000000, init_y = 500000000;
int main() {
  cin >> T;
  while (T--) {
    cin >> B >> W;
    vector<pair<long long int, long long int> > pos;
    set<pair<long long int, long long int> > visited;
    long long int cnt_b = 0, cnt_w = 0;
    queue<pair<long long int, long long int> > que;
    if (B < W) {
      que.push({init_x, init_y});
      visited.insert({init_x, init_y});
      cnt_w++;
    } else {
      que.push({init_x + 1, init_y});
      visited.insert({init_x + 1, init_y});
      cnt_b++;
    }
    pos.push_back(que.front());
    {
      long long int nx = que.front().first, ny = que.front().second;
      while (cnt_b != B && cnt_w != W) {
        nx++;
        long long int cl = (nx + ny) % 2;
        if (cl == 0) cnt_w++;
        if (cl == 1) cnt_b++;
        que.push({nx, ny});
        visited.insert({nx, ny});
        pos.push_back({nx, ny});
      }
    }
    while (!que.empty()) {
      pair<long long int, long long int> curr = que.front();
      que.pop();
      if (cnt_b == B && cnt_w == W) break;
      for (long long int i = (0), i_end_ = (4); i < i_end_; i++) {
        long long int nx = curr.first + dx[i], ny = curr.second + dy[i];
        if (nx < 1 || ny < 1 || nx >= init_x * 2 || ny >= init_y * 2) continue;
        if (visited.find({nx, ny}) != visited.end()) continue;
        long long int cl = (nx + ny) % 2;
        if (cnt_w == W && cl == 0) continue;
        if (cnt_b == B && cl == 1) continue;
        if (cl == 0) cnt_w++;
        if (cl == 1) cnt_b++;
        que.push({nx, ny});
        visited.insert({nx, ny});
        pos.push_back({nx, ny});
      }
    }
    if (cnt_b == B && cnt_w == W) {
      cout << "YES" << '\n';
      for (long long int i = (0), i_end_ = (B + W); i < i_end_; i++) {
        cout << pos[i].first << " " << pos[i].second << '\n';
      }
    } else {
      cout << "NO" << '\n';
    }
  }
}
