#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        int m = n - 1;
        vector<int> a(m);
        for (int i = 0; i < m; i++) {
            cin >> a[i];
        }
        
        int ans = 1;
        
        // dp1[i]: 以a[i]结尾的最长连续递增段长度
        vector<int> dp1(m, 1);
        for (int i = 1; i < m; i++) {
            if (a[i-1] + 1 == a[i]) {
                dp1[i] = dp1[i-1] + 1;
            }
            ans = max(ans, dp1[i]);
        }
        
        // dp2[i]: 以a[i]开头的最长连续递增段长度
        vector<int> dp2(m, 1);
        for (int i = m-2; i >= 0; i--) {
            if (a[i] + 1 == a[i+1]) {
                dp2[i] = dp2[i+1] + 1;
            }
            ans = max(ans, dp2[i]);
        }
        
        // 缺失数放在开头
        if (a[0] > 1) {
            ans = max(ans, dp2[0] + 1);
        }
        
        // 缺失数放在结尾
        if (a[m-1] < n) {
            ans = max(ans, dp1[m-1] + 1);
        }
        
        // 缺失数放在中间
        for (int i = 0; i < m-1; i++) {
            if (a[i] + 2 == a[i+1]) {
                // 正好缺中间一个数,可以连接两段
                ans = max(ans, dp1[i] + dp2[i+1] + 1);
            } else {
                // 不能连接,取两段中较长的一段,加1(把缺失数放在这段边上)
                ans = max(ans, max(dp1[i], dp2[i+1]) + 1);
            }
        }
        
        cout << ans << "\n";
    }
    
    return 0;
}