#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, m, d[N], h[N];
long long dp[N << 2][4];
void build(int id = 1, int l = 0, int r = 2 * n) {
  if (r - l < 2) {
    dp[id][0] = dp[id][1] = 2LL * h[l];
    dp[id][2] = 2LL * h[l] + d[l];
    dp[id][3] = d[l];
    return;
  }
  int mid = (l + r) / 2;
  build(2 * id, l, mid);
  build(2 * id + 1, mid, r);
  dp[id][0] = max(max(dp[2 * id][0], dp[2 * id + 1][0]),
                  dp[2 * id][2] + dp[2 * id + 1][1]);
  dp[id][1] = max(dp[2 * id][1], dp[2 * id][3] + dp[2 * id + 1][1]);
  dp[id][2] = max(dp[2 * id + 1][2], dp[2 * id][2] + dp[2 * id + 1][3]);
  dp[id][3] = dp[2 * id][3] + dp[2 * id + 1][3];
}
pair<pair<long long, long long>, pair<long long, long long> > query(
    int x, int y, int id = 1, int l = 0, int r = 2 * n) {
  if (x >= r || y <= l)
    return pair<pair<long long, long long>, pair<long long, long long> >(
        pair<long long, long long>(0, 0), pair<long long, long long>(0, 0));
  if (x <= l && r <= y) {
    return pair<pair<long long, long long>, pair<long long, long long> >(
        pair<long long, long long>(dp[id][0], dp[id][1]),
        pair<long long, long long>(dp[id][2], dp[id][3]));
  }
  int mid = (l + r) >> 1;
  pair<pair<long long, long long>, pair<long long, long long> > r1 =
      query(x, y, id * 2, l, mid);
  pair<pair<long long, long long>, pair<long long, long long> > r2 =
      query(x, y, id * 2 + 1, mid, r);
  pair<pair<long long, long long>, pair<long long, long long> > ret;
  ret.first.first = max(r1.first.first, r2.first.first);
  if (r2.first.second)
    ret.first.first = max(ret.first.first, r1.second.first + r2.first.second);
  if (r2.first.second)
    ret.first.second = max(r1.first.second, r1.second.second + r2.first.second);
  else
    ret.first.second = r1.first.second;
  if (r1.second.first)
    ret.second.first = max(r2.second.first, r1.second.first + r2.second.second);
  else
    ret.second.first = r2.second.first;
  ret.second.second = r1.second.second + r2.second.second;
  return ret;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", d + i);
    d[i + n] = d[i];
  }
  for (int i = 0; i < n; i++) {
    scanf("%d", h + i);
    h[i + n] = h[i];
  }
  build();
  while (m--) {
    int a, b;
    scanf("%d%d", &b, &a);
    b--;
    if (b < a) {
      b += n;
    }
    printf("%I64d\n", query(a, b).first.first);
  }
  return 0;
}
